Docs

How SHELF works, in eight parts.

Every number below is a contract constant or a contract read. Addresses are under 07 · The accounts.

Rounds happen when the pot allows. What a shelf holds is yours to withdraw at any time.

01

What a shelf is

A shelf is an ERC-721 token on Robinhood Chain. There are 5 000 of them, numbered from 1. Each shelf has a vault: a small contract at an address derived from the shelf id. The vault holds Robinhood Stock Tokens.

The vault does not have an owner of its own. On every call it asks the NFT contract who holds the shelf and only that address can withdraw. Transferring the NFT transfers the vault with it. There is nothing to unwrap and nobody to ask.

Stock Tokens are Robinhood's product. They are ERC-20 tokens issued by Robinhood on Robinhood Chain with USDG pools on Uniswap. SHELF buys them, holds them in shelf vaults and makes no claims about them beyond Robinhood's own documentation.

02

Mint and burn

Minting one shelf requires two things in one transaction On-chain: 100 000 $SHELF, which the mint sends to 0x…dEaD, and 0.02 ETH, of which 0.018 goes to the pot and 0.002 to the protocol.

The burn is atomic. If the burn fails, the mint fails. Supply of $SHELF falls on every mint. There is no ETH-only mint: before $SHELF exists, minting is closed.

Soft limit of 25 shelves per wallet. The 0.002 ETH is the only protocol fee. There is no fee on rounds, delivery or withdrawal.

There is nothing to activate. At mint the shelf records the current round count as its epoch; its stamps are the counters as they stood at that round. It shares every round after that and none before. No backlog exists to claim.

03

Rounds

A round is one call to round(minOut). Anyone can call it when the pot holds at least 0.05 ETH and 6 hours have passed since the previous round On-chain.

The pot swaps ETH to USDG to the next stock in the rotation on Uniswap V3. The contract computes a floor from an on-chain TWAP and refuses any minOut below it, so a caller cannot sandwich the pot by passing a low bound. Then it writes counter[token] += bought × 1e18 / liveShelves. That is the whole distribution: one storage write, no loop over shelves.

A shelf's share of a token is (counter[token] − snapshot[epoch[id]][token]) / 1e18 − delivered[id][token], exposed as accrued(id, token). Every live shelf reads the same number. One shelf, one share. Live shelves means every minted shelf.

The owner names a keeper. Once the threshold and interval are met the keeper may call round; after a further GRACE of one hour anyone may. Shelves minted since the last round wait for the next one (mintedSinceLastRound), so a mint cannot front-run a round it did not fund.

The rotation is a list of ten official Stock Token addresses set by the owner: AAPL, NVDA, TSLA, MSFT, GOOGL, META, COIN, CRCL, PLTR, SPY. Changes go through a 24 hour timelock (pendingRotation), emit an event and only affect future rounds. Rounds happen when the pot allows; if inflows stop, rounds stop.

04

Delivery and withdrawal

deliver(id, token) moves what a shelf has accrued of one token into its vault and updates its stamps. It is permissionless and idempotent: anyone can deliver any shelf. deliverMany(ids, token) is the keeper sweep. The vault contract is deployed on the first delivery, at the address vaultFor(id) already reports.

withdraw(id, token, to, amount) sends amount of one token (0 means everything, accrued included) from the vault to an address of the holder's choosing. Only the current NFT owner can call it. What a shelf holds is yours to withdraw at any time.

The keeper on this site calls harvest() and round(minOut) on a schedule and sweeps deliveries afterwards. It has no special rights. If the keeper stops, anyone can make the same calls.

05

Selling a shelf

Sell the NFT, sell the book. A buyer of shelf #n controls vault #n from the moment the transfer confirms. Nothing is claimed or reset on transfer; accrued but undelivered balances move with the id too.

The NFT declares a 5% ERC-2981 royalty paid to the pot On-chain. Marketplaces that honour it send that royalty into the next rounds for every shelf. Marketplaces that do not honour it send nothing; we cannot enforce it and do not pretend to.

Before selling, check the shelf page: the book, the vault balance on the explorer, the accrued amounts. Before buying, do the same.

06

Where the money comes from

The pot has four inflows. The mint surcharge (0.018 ETH per shelf). Creator fees from $SHELF, which launches on Pons V2 with the pot as creatorFeeRecipient; the pot pulls them from the V2FeeEscrow as native ETH through harvest(), which anyone can call. The 5% royalty on secondary sales, where honoured. Direct donations.

Nothing is promised. If minting and trading stop, the pot stops filling and rounds stop. What shelves already hold is theirs.

The pot has no owner path to holder tokens. rescue can only move ETH above the reserved amount and never Stock Tokens once counted. Σ accrued ≤ tokens bought is an invariant checked in the tests.

07

The accounts

Chain id 4663. RPC rpc.mainnet.chain.robinhood.com. Explorer robinhoodchain.blockscout.com. Every address above is also served at /api/config.

08

Risks

The contracts are not audited. Rounds depend on Uniswap liquidity in USDG pools that Robinhood and third parties provide; a thin pool means worse fills or a skipped round. Stock Tokens are Robinhood's product and subject to Robinhood's terms, corporate action multipliers and trading halts; we do not control them.

$SHELF is a token launched on Pons V2. Its price can go to zero. The pot only fills while people mint, trade $SHELF, or pay royalties. A shelf's book can be worth less than what it cost to mint. Nothing here is investment advice and nothing here promises a return.

Rules, not returns.

Stock Tokens are issued by Robinhood; SHELF holds them in shelf vaults and never promises a return. Not audited. Rules, not returns.