Docs

How Brimstead works.

A covered-call vault for Robinhood's tokenized stocks on Robinhood Chain. Writers lock stock tokens and sell the upside above a strike for an ETH premium. Buyers pay that premium. The Chainlink close on Friday decides who gets what.

How it works

  1. Write. A holder locks stock tokens in BrimVault, picks a strike K (strictly above the live Chainlink price) and a weekly expiry (a Friday, 21:00 UTC), and sets a premium per token in ETH.
  2. Buy. A buyer pays the ETH premium for some or all of those tokens. The premium is held in the vault until the offer resolves.
  3. Settle. After expiry anyone can settle the offer at the Friday close price P.
  4. Claim. If P is above K, each buyer receives amount × (P − K) / P tokens and the writer keeps the rest. Otherwise the writer gets every token back. The writer receives the premium minus a protocol fee of at most 1%.

There is no borrowing, no lending to a third party and no liquidation. Every call is fully backed by the writer's own tokens, and a token only ever leaves the vault back to its writer, or to a buyer as the part above the strike.

Writing a call

  • Only the stock tokens listed in the vault at deploy can be written: NVDA, TSLA, AAPL, SPY, QQQ, MSFT, AMZN, GOOGL, GLD, SPCX and MSTR, each with its Chainlink feed. The list is fixed.
  • The strike must be strictly above the latest Chainlink price; a strike equal to it is rejected. Every call therefore starts out of the money and can be bought at the price it was written at.
  • The expiry must be a Friday 21:00 UTC between 1 and 28 days away.
  • Writing needs a fresh price: the latest Chainlink round must be no older than 26 hours. Stock feeds do not print over the weekend, so writing pauses then. The app shows "Market closed — writing reopens with the Monday print".
  • You can withdraw unsold tokens at any time, before or after expiry. Tokens a buyer has paid for stay locked until the offer resolves.
  • A premium of zero is allowed. Tokens that take a fee on transfer are refused.

Buying upside

  • Buying closes 2 hours before expiry.
  • Only out-of-the-money calls can be bought. The live Chainlink price must be strictly below the strike; at or above it, the vault rejects the purchase, so nobody can buy an in-the-money call at a premium set earlier. There is no repricing: a writer who wants a new premium withdraws the unsold tokens and writes again.
  • This check needs a Chainlink round no older than 4 days, which still works over a normal weekend.
  • The premium is amount × premium per token, rounded up. Any extra ETH sent is returned in the same transaction.
  • Positions are not transferable.

Weekend quotes. Over the weekend, buys are checked against Friday's last Chainlink print. A writer's premium can therefore be stale against news that moves the stock before Monday's open. Writers can withdraw unsold tokens at any time to pull a quote.

Settlement: the Friday close

The settlement price is the last Chainlink round at or before Friday 21:00 UTC for that stock. The contract accepts a round only if the next round of the same feed printed after 21:00 UTC, which proves it was the last one before the close. So settlement becomes possible as soon as the next round after expiry has printed: usually minutes after 21:00 UTC, because after-hours prints continue; failing that, at the Monday reopen. There is no deadline for that next round: if it prints late and nobody has taken the refund path first, settlement is still valid.

  • Anyone can call settle; the app finds the right round for you.
  • The close round must be no older than 26 hours at expiry. If the market was shut all Friday (a holiday), there is no valid close and the offer goes to the refund path.
  • The close is the price as last printed by Chainlink, whose feeds update on a 0.5% move or every 24 hours. It can be up to 26 hours old and can differ from the true market close by about 0.5%.
  • On settle, the escrowed premium is credited to the writer minus the protocol fee, which is credited to the fee recipient. Both are withdrawn with withdrawEth.

Payout examples

Examples only, with round numbers. They are not prices, forecasts or offers.

ExampleWrittenStrike KClose PBuyer receivesWriter keeps
Below strike10$100$95010 + premium
At strike10$100$100010 + premium
Above strike10$100$11010 × 10/110 = 0.9099.091 + premium
Well above10$100$12510 × 25/125 = 2.0008.000 + premium

"Premium" here means the premium paid by buyers minus the protocol fee. Token amounts are rounded down by the contract. The buyer receives stock tokens, not dollars.

Refunds (fallback)

If no valid settlement price can exist, the offer is refunded in full: every buyer gets the whole premium back with no fee, and the writer gets every token back. The refund path opens 4 days after expiry and applies when:

  • the issuer has paused the stock's oracle, or a corporate action (a scheduled change of the token's multiplier) falls around expiry;
  • the feed has not printed since expiry, or is stale;
  • no valid close exists, for example the feed was replaced after expiry or the last round before the close is older than 26 hours.

The issuer's oracle-pause flag is checked at the moment the refund is called, not at expiry. A keeper settles offers as soon as the next Chainlink round after the close exists, which keeps that window short.

After 30 days any unresolved offer can be refunded with no conditions, so nothing is locked forever. From then on both paths are open and whoever calls first decides. A gap in the feed's rounds right after the close can only be resolved this way.

Claims

  • Claims are pulled: after settlement or refund, each buyer position and each writer offer is claimed once. Anyone can trigger a claim; the funds only go to the rightful owner.
  • Buyer and writer claims are independent. If one side's token transfer fails (for example the issuer blocked that address), the other side can still claim.
  • ETH that cannot be sent directly is credited and can be withdrawn later, to your own address or to another address you choose.

Fees

The protocol fee is 1% of the premium (fixed at deploy; 1% is also the contract's maximum). It is taken only at settlement, never on refunds. The fee is credited to BrimDrip inside the vault and moved there by withdrawEth, which anyone can call; BrimDrip then streams it to $BRIM stakers. There are no other vault fees; you pay normal Robinhood Chain gas in ETH.

BrimDrip: staking $BRIM

BrimDrip streams every wei of ETH it receives to $BRIM stakers, pro rata to stake, linearly over 7 days. Its ETH comes from the vault fee above, from Pons creator fees the team sends in by hand after launch, and from anyone who sends ETH to it.

  • Small payments wait. Incoming ETH first goes to a queue. A new 7-day stream (what is left of the current one plus the queue) starts only when at least 0.005 ETH is queued, someone is staked and the token is set. Smaller amounts wait in the queue until they add up; they are never lost.
  • Start stream. Anyone can start a stream with kick() once those conditions hold. It is needed after the first stake, because staking never starts a stream by itself. The stake page shows the button when it is possible.
  • Stake and unstake at any time. Rewards earned so far stay claimable after unstaking; claim whenever you like.
  • While nobody is staked, the stream is not given away: it goes back to the queue and restarts after the next stake.
  • The $BRIM address is set once, by the deployer, after launch. Staking opens then. That is the deployer's only power: it cannot touch the ETH. If it were ever set wrong, it could not be fixed, and both contracts would have to be deployed again.
  • No promised returns: the stream is only as large as the ETH that arrives.

Limits

  • Chainlink stock feeds run 24/5. They do not print over weekends and can be quiet on holidays. That is why writing pauses at the weekend and why settlement waits for the next round after the close.
  • Feeds price one stock token, which equals one share times the token's multiplier. Strikes are in the same unit.
  • The vault has no owner, no admin and no upgrade path. The stock list, fee and fee recipient cannot be changed after deploy. Nobody can pause it, and nobody can fix it either.
  • Robinhood (the token issuer) can pause the stock tokens, block addresses or pause the oracle. See Risks.
  • One offer has one strike and one expiry. There is no early exercise, no secondary market for positions and no partial settlement.
  • There is no sequencer uptime check. A Robinhood Chain outage delays settlement and claims; it does not change which round is the close.

Contracts

Review status

Independent review completed (no critical/high/medium findings); not a formal audit. BrimVault and BrimDrip have unit, fuzz and mainnet-fork tests and an independent review, and their source is verified on Blockscout. There is no formal verification. A review lowers the risk; it does not remove it. Only use amounts you can afford to lose.