01
Overview
RobinOptions is a factory of isolated, fully collateralized American-style option series. Every series is its own ERC-20 contract with fixed assets, type, strike, and expiration.
Collateral is transferred into the series before option tokens are minted.
A holder may exercise at any time while the block timestamp is before expiration.
Calls deliver the underlying. Puts exchange the underlying for the fixed quote amount.
What the protocol is not. It is not an order book, broker, oracle, pricing engine, or custodian. The contracts create and settle positions; users arrange any sale or transfer of option tokens separately.
02
Core rules
Terms are immutable. A deployed series cannot change its underlying, quote token, call/put type, strike, expiration, name, or symbol.
Option tokens are transferable. They use the same decimals as the underlying asset and may be sent like any ERC-20 token.
Writer shares are not tokens. They stay in the series mapping under the writing wallet and cannot be transferred to another account.
The first exercise closes writing forever. This prevents new writers from entering after exercise proceeds have reached the pool.
Exercise ends exactly at expiration. Calls to write or exercise revert when block.timestamp >= expiration.
Redemption starts at expiration. Writer shares become redeemable when block.timestamp >= expiration.
Transfers must be exact. Fee-on-transfer and other tokens that deliver less than the requested amount are rejected.
The exercise fee is fixed at 10 bps. That is 0.10% of the strike settlement amount, rounded up to the nearest quote-token base unit.
03
Option lifecycle
Write
The writer approves collateral and calls write(amount, optionRecipient). The contract pulls collateral, records writer shares, and mints an equal number of option-token units.
Hold or transfer
The option recipient may keep or transfer the ERC-20 position. Transferring option tokens does not transfer writer shares.
Exercise
Before expiration, the holder approves the required settlement asset and calls exercise(amount, assetRecipient). Exercised option tokens are burned.
Redeem
At or after expiration, each writer calls redeemWriterShares(shares, recipient) to receive a pro-rata portion of both assets left in the pool.
Call series
Underlying in, quote out
- Writer escrows underlying one-for-one.
- Holder pays strike plus fee.
- Holder receives the underlying.
- Writers later redeem remaining underlying and collected quote.
Put series
Quote in, underlying out
- Writer escrows the full strike value in quote tokens.
- Holder supplies the underlying.
- Holder receives strike minus fee.
- Writers later redeem remaining quote and collected underlying.
04
Amounts and calculations
All contract calls use integer base units. A whole option equals 10 ** underlying.decimals() units.
scale = 10 ** underlyingDecimalsamount × strikePrice ÷ scaleceil(strikeAmount × 10 ÷ 10,000)poolBalance × shares ÷ totalWriterSharesCall strike payments and put-writing collateral round up. Put exercise strike output and writer redemption use integer rounding down. Use the preview methods immediately before submitting; pool balances can change between preview and execution.
| Action | Caller supplies | Caller/recipient receives |
|---|---|---|
| Write call | amount underlying | amount option tokens + writer shares |
| Write put | Full strike value in quote | amount option tokens + writer shares |
| Exercise call | Strike amount + fee in quote | amount underlying |
| Exercise put | amount underlying | Strike amount − fee in quote |
| Redeem | Writer shares are reduced | Pro-rata underlying + quote balances |
05
Using the contracts
The app prepares these calls for you. Direct integrations should follow the same approve, preview, and execute sequence.
Network configuration
const robinhoodChain = {
id: 4663,
name: "Robinhood Chain",
nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
rpcUrls: { default: { http: ["https://rpc.mainnet.chain.robinhood.com"] } },
blockExplorers: { default: { url: "https://robinhoodchain.blockscout.com" } },
};The public RPC is rate-limited. Production integrations should use a dedicated provider. ETH is required for gas even when the option settles in WETH or USDG.
Write options
- 1
Read
collateralRequired(amount)to get the collateral token and exact amount. - 2
Call
approve(seriesAddress, collateralAmount)on that ERC-20. - 3
Call
write(amount, optionRecipient)on the series. - 4
Confirm the
OptionsWrittenevent and updatedwriterShares.
Exercise options
- 1
Read
exerciseTerms(amount)for the strike amount, fee, and total paid or received. - 2
For a call, approve
strikeAmount + protocolFeequote tokens. For a put, approveamountunderlying tokens. - 3
Call
exercise(amount, assetRecipient)before expiration. - 4
Confirm the
OptionsExercisedevent. The option balance is burned in the same transaction.
Redeem writer shares
- 1
Wait until the series expiration timestamp.
- 2
Read
writerShares(wallet)and preview withpreviewWriterRedemption(shares). - 3
Call
redeemWriterShares(shares, recipient). No token approval is required. - 4
Confirm the
WriterCollateralRedeemedevent and both asset transfers.
Important read methods
underlying()Underlying ERC-20 addressquote()Strike/settlement ERC-20 addressoptionType()0 call, 1 putexpiration()Unix expiration timestampstrikePrice()Quote base units per whole underlyingwritingClosed()Whether any option has been exercisedpooledUnderlying()Accounted underlying remaining in the poolpooledQuote()Accounted quote remaining in the pooltotalWriterShares()Outstanding writer claimsbalanceOf(account)Transferable option-token balance06
Factory administration
Only the factory owner can deploy new series. Ownership does not grant control over collateral held by an existing series.
Create series and change the address that receives future exercise fees.
Change series terms, withdraw pool assets, freeze option transfers, exercise user positions, or redeem another writer’s shares.
createSeries parameters
underlyingERC-20 delivered by calls or supplied to putsquoteERC-20 used for strike settlementoptionType0 for call; 1 for putexpirationFuture Unix timestampstrikePriceQuote base units per one whole underlying tokenname / symbolMetadata for the new option ERC-20The factory rejects zero/non-contract assets, identical assets, past expiration, zero strike, empty metadata, underlyings with more than 18 decimals, and duplicate terms.
07
Stock-token considerations
Robinhood stock tokens are tokenized debt securities issued by Robinhood Assets (Jersey) Limited. They provide economic exposure, not legal or beneficial ownership of shares in the underlying issuer.
Corporate-action limitation. Stock tokens expose an ERC-8056 UI multiplier for splits and other corporate actions. RobinOptions settles raw ERC-20 units and does not automatically modify an existing option’s strike, size, or terms when that multiplier changes.
- Resolve stock-token addresses from Robinhood’s canonical asset registry. A matching ticker does not prove a token is genuine.
- Read
uiMultiplier(), pending multiplier fields, andoraclePaused()before creating or interacting with a stock-token series. - Do not apply the UI multiplier twice when an external price feed already incorporates it.
- Stock tokens are 18-decimal ERC-20s, but displayed economic exposure may differ from raw balance after a multiplier update.
- Availability is jurisdiction-restricted, including unavailability to U.S. persons. Users are responsible for eligibility and compliance.
08
Security and risks
The factory implementation is verified on Blockscout, and every series exposes its terms, balances, writer shares, and lifecycle state onchain.
A defect may cause loss, blocked funds, or settlement behavior that differs from user expectations.
Writers face assignment and asset opportunity cost. Holders may lose the entire price paid for an option.
Underlying or quote tokens can depeg, pause, block transfers, change behavior, or become illiquid.
Writer proceeds are pooled. Outcomes depend on total exercises and each writer’s pro-rata share, not individual lots.
Integer arithmetic rounds some values up or down. Very small positions may revert, and dust may remain until final redemptions.
Sequencer outages, reorgs, congestion, RPC failure, or compliance filtering may delay or prevent a transaction.
Token approvals authorize transfers. Review the spender and amount, and revoke allowances you no longer need.
Always verify addresses and transaction calldata in your wallet. The website is only one interface to the contracts.
Use at your own risk. Do not deposit funds you cannot afford to lose. This documentation is technical information, not financial, legal, tax, or investment advice.
09
Canonical deployment
0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC0x117cc2133c37B721F49dE2A7a74833232B3B4C0CNetwork
Chain ID
Exercise fee
The protocol app enumerates series from seriesCount() and seriesAt(index) on the factory, then reads each series directly. Verify every address in your wallet before signing.
10
Frequently asked questions
Does the protocol decide whether an option is in the money?
No. There is no price oracle and no automatic cash settlement. A holder chooses whether to exercise and physically exchanges the specified assets at the fixed strike.
Can a writer close a position before expiry?
Not through the current contracts. Writer shares are non-transferable and redeemable only at or after expiration. Holding option tokens does not cancel writer shares.
Can option tokens be sold?
They are standard transferable ERC-20 tokens, but the protocol does not provide an order book or guarantee a market, price, or liquidity venue.
What happens to unexercised options?
They cannot be exercised after expiration and have no claim on the pool. Writers redeem the remaining collateral and exercise proceeds.
Can writing reopen after the first exercise?
No. writingClosed becomes true on the first exercise and never returns to false.
Why might a transaction revert?
Common reasons include expiry, closed writing, insufficient option balance, missing allowance, insufficient pool balance, zero or too-small amounts, unsupported token transfer behavior, or the wrong network.
Is RobinOptions affiliated with Robinhood?
No. RobinOptions is an independent protocol built on Robinhood Chain and is not affiliated with Robinhood Markets, Inc.
Before you transact