An NFT that owns
a book of stocks.
5 000 shelves. Every round, the pot buys Robinhood Stock Tokens and splits them equally across every live shelf, into a vault that only the NFT holder controls. Sell the NFT, sell the book.

A stock you can hold, but not carry.
Tokenised stocks sit in a wallet like any other ERC-20. There is no object that packs a basket of them, keeps buying, and moves as one thing.
- Ten swaps, ten approvals, ten balances to watch
- Selling the basket means selling ten positions
- Nothing keeps buying while you are away
- No object to hold, show or hand over
- One NFT, one vault, ten enamel plates
- Every round delivers the next stock to every shelf
- Sell the NFT and the whole book goes with it
- Withdraw any token, any block, no one to ask
Three rules, printed on chain.
Everything below is a contract constant or a contract read. Nothing is a setting we can change quietly.
Each shelf has a CREATE2 vault derived from its id. The vault asks the NFT who holds it on every call. Transfer the NFT and the vault follows; nothing to unwrap.
- Address known before deployment
- Only the current holder withdraws
- No admin path to holder tokens
The pot buys official Robinhood Stock Tokens on Uniswap: plain ERC-20s with USDG pools. AAPL, NVDA, TSLA, MSFT, GOOGL, META, COIN, CRCL, PLTR, SPY.
- Ten tokens, one per round, in order
- Rotation changes behind a 24 h timelock
- Codehash check against Robinhood's proxy
A round is one swap and one counter write. Every live shelf gets the same share regardless of when it minted. Shelves minted since the last round wait one round.
- O(1) in shelves
- TWAP floor on the swap
- Anyone can call after the keeper's hour
From mint to a full shelf.
Three contracts, one path. Every step is a call you can read on the explorer.
Burn 100 000 $SHELF and pay 0.02 ETH in one transaction. 0.018 to the pot, 0.002 to the protocol.
When the pot holds 0.05 ETH and 6 h have passed, round(minOut) buys the next stock on Uniswap behind a TWAP floor.
counter[token] += bought / liveShelves. One storage write. Every live shelf reads the same share.
deliver(id, token) moves the share into the shelf's own vault. Withdraw whenever you like.
Mint price, burn, threshold and interval are contract constants; the pot figure is read from ShelfPot every 30 seconds.
Ten official Stock Tokens, one per round.
Prices from Robinhood, liquidity from the deepest USDG pool on DexScreener. Each tile links to the token on Blockscout.
The image is the vault.
The NFT image is picked from what the vault holds: 0, 3, 6 or 10 plates. Metadata is served live from this site.




- Live shelves
- 1 275
- $SHELF burned
- 128 400 000
- Threshold
- 0.050 ETH
- Buys next
- CRCL
- Delivered
- $22 018
- Last round
- 0x955b…daf8 · 3h ago
- Pot0xC8b6…E232
- NFT0xa67b…b318
- Vault factory0x3116…D57b
- $SHELF0xD967…7D76
- Pons escrow0xd3AF…Ac9e
- Uniswap router0xCaf6…5cb2
- QuoterV20x33e8…A9E7
- USDG0x5fc5…d168
What the contract actually guarantees.
Four properties, each covered by a test in the repo. Being on chain is not the same as being audited.
There is no function that moves an ERC-20 anywhere except deliver and withdraw. rescue only moves ETH above the reserved pot.
minOut must clear a 30 minute TWAP on both hops times floorBps. A fake keeper quote protects nothing; the pot reads its own price.
Every proposed address must carry the runtime codehash of Robinhood's Stock Token proxy, then wait 24 hours in public.
5 000 shelves, ids from 1. 100 000 $SHELF to 0x…dEaD inside every mint. Constants, not settings.
The contracts have not been through a third-party audit. 99 unit tests and 5 fork tests against Robinhood mainnet pass; the adversarial review and its fixes are in the docs. Rules, not returns.
The short answers.
What is a shelf?
What do I need to mint?
When do rounds happen?
Can I lose money?
Is there a lockup?
What is deployed right now?
The token that feeds the pot.
Live on Pons V2 with the pot as creator fee recipient: every trade feeds the next round. Each mint burns 100 000 $SHELF inside the transaction. The only valid address is the one under The accounts and on @ShelfRH.