THE FLOOR IS
ARITHMETIC
Most NFT floors are a feeling. Ours is a division. Every trade pays the treasury — 10% of $ROBSTR swaps, 5% of broker sales. The treasury splits three ways: 40% burns the token, 45% builds the RWA Reserve, 15% pays the working brokers. Any broker, at any moment, redeems for Reserve / N — paid as a pro-rata slice of real tokenized equities. The share count behind your broker never falls.
computed on request
No IPFS, no server, no links to rot. The contract holds a seed and drawing code and renders every broker on request. Re-run the generator, get the same 10,000. Nobody can re-roll a rare — including us.
45% of every fee buys tokenized equities and leaves them in one address. Redemption pays a pro-rata slice of everything in there — no oracle, no valuation, just division.
R′/N′ = R/N — exactly, and separately for every asset in the Reserve. Whoever redeems takes their share and nothing else. Only fees move the claim, and fees only move it up.
Burn $ROBSTR and your broker clocks in. Working brokers split the Payroll — stock bought for their desk and delivered to their own wallet. Sell the broker and it clocks out.
gas in ETH
then it joins the earning set
claimed whenever you want it
no permission needed
every broker sale
no pause button
only falls
for every broker alive
weighted by book + conviction
A strategy token that you can only sell is a token nobody has a reason to buy. $ROBSTR has one job you cannot route around: it wakes brokers up.
An unactivated broker renders, trades and redeems normally, and earns nothing. Putting it on the payroll burns 6,500 $ROBSTR: destroyed, no unlock, no cooldown.
Staking would return that supply to the market later; burning does not. And since the only use of the token destroys it, there is no farm-and-dump loop — nothing here emits a $ROBSTR.
Activation resets on transfer, so every secondary sale burns again. Demand tracks how much the collection trades.
claim = Reserve / N (per asset, in kind) one redemption: R' = R − R/N N' = N − 1 R'/N' = ( R·(N−1)/N ) / (N−1) = R/N ← exact holds for every line in the Reserve independently: NVDArh'/N' = NVDArh/N , AAPLrh'/N' = AAPLrh/N , …
Reserve (example) N = 9,000 brokers alive
1,800 NVDArh → 0.2000 NVDArh per broker
1,350 AAPLrh → 0.1500 AAPLrh per broker
900 MSFTrh → 0.1000 MSFTrh per broker
36 ETH → 0.0040 ETH per broker
redeem(tokenId) sends you exactly one of each line.
the broker burns. N becomes 8,999. every remaining
per-broker number is unchanged.Nothing is priced. The contract does not ask what NVDArh is worth, does not convert, does not route through a DEX. It divides balances by N and transfers. That is why there is no oracle in this system and no way to manipulate the payout.
The share count behind your broker only goes up. Fees add shares. Redemptions divide the pile among fewer brokers, which leaves each remaining per-broker number exactly where it was. There is no path in the contract that reduces shares-per-broker.
The market value of those shares moves with the market. If NVDArh falls 30%, the ETH value of your claim falls with it. The Reserve is not hedged.
Stated in units:
shares per broker: monotonic ▲ value per broker: whatever the market says
The alternative — quoting the floor in ETH while holding stock — would need an oracle to price the difference, and a floor that needs an oracle is not a floor.
| desk | brokers | share | basket |
|---|---|---|---|
| counting all 10,000 brokers… | |||
Nothing in the redemption path reads a price. The claim is a division of token balances, so there is no feed to corrupt, no TWAP to manipulate, no stale-price window to snipe.
The Reserve buys and holds. It never sells a position to buy another, so it cannot be front-run and cannot bleed to fees. The basket changes only when a name stops being tokenized.
There is no admin function that moves an asset out of the Reserve. The only exit is redeem(), and it pays the caller their own 1/N.
OFF
Fresh out of the mint or fresh off a sale. Renders, trades, and redeems normally. Earns nothing. Costs nothing to leave this way.
activate(tokenId)
Burns 6,500 $ROBSTR. Gone from supply, permanently. No lock, no unstake, nothing handed back. One call, one broker.
ON
Joins the earning set. Accrues its share of the Payroll in its desk's basket, claimable into its own ERC-6551 wallet whenever you want it.
OFF again
Transfer switches it off. Unclaimed entitlement and anything left in its wallet follow the NFT. The buyer burns again to resume.
Staking defers sell pressure; burning removes it. Every locked token comes back to market eventually. A burned one does not.
totalSupply falls and stays down, and the broker keeps working afterwards; there is nothing to reclaim later.
Because the only use of the token destroys it, there is no farm-and-dump loop to design around: nothing in this system ever emits a $ROBSTR.
Sleep-on-transfer is the other half. Without it, activation is a one-time event — 10,000 burns and demand is finished. With it, every trip through the secondary market burns again, so demand tracks the collection's turnover rather than its first week.
weight = sqrt(Book) × conviction
Book 1–250 ETH, long tail, from the sheet
sqrt() so a 250-book broker earns ~16× a 1-book
broker, not 250×
conviction Paper Hands 0.8× Iron Hands 1.2×
Weak Hands 0.9× Diamond Hands 1.5×
Steady 1.0× Never Sells 2.0×
your share = your weight / sum of active weightsWithout Payroll a holder has exactly one button: redeem. Fees push the claim up, the claim pulls people toward the Furnace, the collection burns down. That is the roadmap, but a machine with only an exit empties.
Payroll is the counterweight. A working broker gives up a stream of real stock when it goes into the Furnace, so the exit costs something. Redemption is still always open, still always Reserve / N, still never gated — it is simply no longer free to walk away from.
It is also the reason to hold $ROBSTR at all: without activation the token has no use beyond selling it to somebody else.
| broker | price | vs claim | state |
|---|
Each broker is 24×24 pixels produced by a function. The contract holds a seed (RobinStrategy/ROBSTR/v1) and the drawing code, and returns an SVG from tokenURI(). No IPFS, no server, no gateway, nothing to rot. Seven trait slots, 92 hand-drawn variants, 10,000 / 10,000 unique.
The SVG is emitted as horizontal runs of rectangles — the same shape fully on-chain collections use — so a marketplace, a wallet and a block explorer all get the identical image from the identical call. If the chain is up, the art is up. The most common death of an NFT collection is a lapsed pinning subscription. That failure mode does not exist here.
The trait roll is an xmur3 hash of the collection seed and token id, expanded into a mulberry32 stream. No Math.random(), no block entropy, no VRF. Anyone can re-run the open-source generator and reproduce all 10,000 brokers byte-for-byte on any machine.
Duplicates are excluded by hashing the trait combination; a collision re-rolls that token with a new salt. Across 10,000 it took 7 re-rolls. Nobody can quietly re-roll a rare — including us, because the seed is a published constant and changing it changes every broker at once, visibly.
0.0006 ETH per broker, max 20 per wallet, gas in ETH on Robinhood Chain (chainId 4663). No presale, no allowlist, no team brokers.
The collection mints first and $ROBSTR launches after, so supply is fixed and public before anything can be priced against it. Every mint draws a broker from the remaining collection, creates its ERC-6551 wallet, and gives it a standing claim on the Reserve for as long as it exists.
What backs that claim is the machine: 45% of every fee buys tokenized equities and leaves them in the Reserve, and the claim is your 1/N of whatever is sitting there when you call redeem().
The collection mints first and the token launches after, so supply is fixed and public before anything can be priced against it.
One treasury address is fed by two independent flows:
- 10% of every $ROBSTR swap — taken by a v4 hook at swap time. On sells the fee is taken in ETH; on buys it is taken in $ROBSTR and burned on the spot, so a buy shrinks supply without a round trip through the market.
- 5% of every broker sale — marketplace royalty, paid to the treasury, not to a person.
Trading the pictures funds the token; trading the token funds the pictures. Whichever side the market decides it likes this week, the other side gets paid.
Every ETH that reaches the treasury is divided by a rule in the contract, with no discretion at any step:
40% buyback + burn $ROBSTR supply only falls 45% RWA Reserve backs Reserve / N 15% Payroll pays working brokers
The 60% that is not burned buys real tokenized equities either way — the split is between everyone's claim and the working brokers' wages. Both land in stock; one is divided by N, the other by weight.
Percentages are constructor constants with no setter. Changing them would mean deploying a different contract, which the collection would not point at.
The Reserve is one address holding tokenized equities and a working balance of ETH. Fees arrive in ETH; above a published threshold the keeper converts them into the house basket and leaves them there.
It buys and holds. It never rotates a position, never takes profit, never rebalances on a schedule. A Reserve that trades can be front-run and bleeds to spread; a Reserve that only accumulates cannot. The basket changes only when a name stops being tokenized on-chain, which is a published event, not a decision.
The ETH left unconverted below the threshold is part of the Reserve and is paid out pro-rata like any other line.
Splits and dividends do not disturb any of this. Stock Tokens follow ERC-8056: corporate actions move a global uiMultiplier() rather than rebasing balances, so the raw token amount the Reserve holds never changes underneath the division. Redemption divides raw balances; the multiplier then applies identically to everyone. The invariant in section 08 is untouched by a stock split.
Send a broker to the contract and receive 1/N of every asset the Reserve holds. The broker burns, its hidden last words are emitted on-chain, N falls by one.
event RetiredEarly(uint256 indexed id, string lastWords);
No price is read anywhere in this path. The contract divides balances and transfers — that is the entire operation. There is no oracle to corrupt, no TWAP window to game, no slippage to eat, and no way to make the payout depend on anything except N.
No cooldown, and no attack that would need one. Buying a broker below the value of its claim and redeeming immediately is not an exploit — it is the arbitrage that drags the market floor back up to the arithmetic one. No minimum supply either: the last broker standing redeems the entire Reserve.
Does one holder draining their share hurt the rest? One redemption, one asset:
R' = R − R/N N' = N − 1 R'/N' = ( R·(N−1)/N ) / (N−1) = R/N ← exact
The claim after equals the claim before. It holds independently for every line in the Reserve, because every line is divided by the same N. A thousand people leaving take exactly a thousand shares and nothing else.
Only fees move the claim, and fees only add. The model in the repository asserts this on every simulated day and throws if it is ever violated — including under a simulated permanent bank run.
A gold 1/1 redeems for exactly what a hooded common redeems for.
Weighting the claim by rarity would mean the contract has to know what rarity is worth. That means a price, and a price means an oracle, a vote, or a table somebody chose — every one of them a lever. A floor that needs an oracle is not a floor.
Payroll is the deliberate exception. Traits do change what a working broker earns: the weight is sqrt(Book) × conviction, both read straight from immutable metadata, so no price is involved there either. Two rules by design: the claim is flat for everyone, the wage is weighted. Section 12 has the numbers.
A broker arrives asleep. It renders, it trades, it redeems for Reserve / N like any other — activation never gates the claim. What it does not do is earn.
activate(uint256 tokenId) burns 6,500 $ROBSTR from the caller sets the broker ON, joins the earning set
Burn, not stake. The tokens are destroyed and totalSupply falls. There is no lock, no unstake, no cooldown, no dashboard to withdraw them from later. Nothing in this system ever mints a $ROBSTR, so the only use of the token is a one-way sink — which means there is no farm-and-dump loop to design around.
6,500 per broker is a constant with no setter. If all 10,000 activate, 65,000,000 are destroyed — 6.5% of supply. Same price for a 1/1 as for a common.
Transferring an active broker switches it off. The new owner burns again to resume.
Without this rule, activation is a one-time event: 10,000 burns and the token is finished forever. With it, every trip through the secondary market burns again, so demand for $ROBSTR tracks the collection's turnover rather than its first week.
Unclaimed entitlement and anything already sitting in the broker's wallet follow the NFT. A buyer inherits them; a seller who wants them takes them out before listing. Both are visible on-chain before anyone signs, so an active broker with a full wallet is simply worth more, and the market can price that without help from us.
15% of fees buys stock for the working brokers. Each broker's share is proportional to its weight:
weight = sqrt(Book) × conviction multiplier Paper Hands 0.8 Iron Hands 1.2 Weak Hands 0.9 Diamond Hands 1.5 Steady 1.0 Never Sells 2.0
Book is the broker's AUM from its trait sheet, 1–250 ETH on a long tail. The square root is deliberate: it makes a 250-book broker worth about 16× a 1-book broker instead of 250×, so the payroll is skewed without being pointless for everyone else.
Weights touch the Payroll and nothing else. They never touch Reserve / N. The trait sheet is a pay scale, not a claim ladder — the moment a claim needs weighting it needs pricing, and we are back to the oracle problem in section 09.
Every broker is dealt a Desk at generation, deterministically, with everything else. The desk decides which names its payroll is spent on — Equities gets mega-cap tech, Options gets the high-beta retail book, Dark Pool gets nothing but indices, and the Sherwood Desk works the house basket. The eight 1/1s all sit at the Sherwood Desk, but they do not own it — the generator deals that charter to roughly 1.7% of the collection.
Baskets are drawn from what Robinhood Chain has actually tokenized, which is a narrower universe than the stock market: around 190 listed names, no banks, no brokers, no exchanges. Two desks are therefore defined by a rule rather than a fixed list — Market Making works the three deepest names by on-chain volume, Prime Brokerage works the rest of the large-cap book. Both refresh on a published cadence, so a desk cannot quietly become somebody's favourite ticker.
Baskets are equal-weight inside a desk. Any name that stops being listed is dropped and the remainder renormalised to 100% — published, checkable, no discretion at the moment of purchase.
Desks route the Payroll only. The Reserve holds one house basket shared by everyone, because the claim has to be identical across all 10,000 or section 08 stops being true. Full distribution table on the RESERVE tab, counted live from the generator.
Every broker owns a smart-contract account bound to its token id. Payroll is claimed into that account, not into yours.
Assets left in a broker's wallet move with the NFT. Sell the broker and you sell what is inside it; withdraw first and you sell an empty one. Both are visible on-chain before signing.
The account follows the current holder, so the buyer of a loaded broker controls its contents the moment the transfer lands — no extra step, no trust in the seller.
Contracts do not run themselves. Converting fees into stock, distributing payroll and executing buybacks are transactions somebody has to send.
A keeper runs on a schedule and advances each stage once its threshold is met. The thresholds exist because gas and spread would eat a purchase made every ten minutes.
Every entry point is permissionless. If the keeper is offline, balances roll forward and anybody can call the same functions. It cannot choose amounts or recipients, and it cannot skim.
1,000,000,000 $ROBSTR, fixed and burnable. No team allocation, no reserve allocation, no vesting schedule, no presale — because there is nothing to vest.
The entire supply is placed single-sided into one Uniswap v4 pool at launch. No ETH is contributed from our side and none is required: price starts at the bottom of the band and rises as the pool is bought into. The LP position is permanently locked, and the locker address is published with the rest.
Launch is the block after mint-out. Supply of the collection is fixed and public before the token exists, so nothing about the token can change what a broker is.
The swap fee opens at 95% in the first block and decays to its permanent 10% over ten minutes.
This does not discourage sniping the launch — it makes it arithmetically pointless. A bot buying in block one pays almost the entire trade to the treasury, which splits it 40/45/15 like any other fee. There is no allowlist to administer, no bot filter to maintain and nobody to appeal to.
The decay curve is in the contract and cannot be paused, extended or restarted.
It is one address with no owner, no multisig, no timelock and no governance module.
- Withdraw the Reserve. There is no such function; redemption is the only path out, and it pays the caller their own 1/N.
- Sell a broker. It never holds one — the Furnace burns rather than relists.
- Change the split, the burn or the activation cost. Constants, no setters.
- Pause, upgrade or vote. None of those functions exist.
The honest list, in the order we think it matters.
- No volume, no machine. Fees fund everything. If trading dies, the claim goes flat and payroll goes to zero. The claim never falls — it stops rising. A quiet collection is a flat claim, and scarcity without demand is just scarcity.
- The Reserve is not risk-free. It holds equities. The share count behind your broker only goes up; what those shares are worth moves with the market, and can move a long way down.
- The Reserve holds thin assets. Around 190 names are tokenized but only about a dozen clear $500k of on-chain volume a day, and 99% of the depth sits in Uniswap pools. Large purchases move the price against us, which is why buying batches above a threshold instead of trickling.
- Stock Tokens are not equity and not available everywhere. They are tokenised debt securities issued by Robinhood Assets (Jersey) Limited that track the share, prohibited to U.S. persons and restricted in several other jurisdictions. Transfers are unrestricted at the contract level and redemption pays whoever calls it; whether you may hold what you receive depends on where you are.
- A name can stop being listed. Then it is dropped from the basket and the remainder renormalised. Whatever the Reserve already holds of it stays in the Reserve and keeps being paid out pro-rata.
- The collection is designed to shrink. 10,000 → 0 is the roadmap, not a risk disclosure we are burying. Payroll slows it; nothing stops it.
- No third-party audit firm has been engaged. Every contract is published and verified on the explorer. Read them before you transact.
Nothing here is investment advice and nothing here is an offer.
#1 The Sheriff · #7 Mr. Market · #42 The Whale · #404 The Liquidated · #777 Solid Gold Robin · #1337 The Quant · #4663 Genesis Broker (the chainId) · #9999 The Last Bagholder.
All eight sit at the Sherwood Desk, hold a Sherwood Charter, carry a 250 ETH book and never sell. They activate for the same 6,500 $ROBSTR as everyone else and redeem for the same Reserve / N as everyone else.
The Furnace skips them: the contract passes over 1/1s when it takes the cheapest ask off the floor. Eight seats stay at the desk even when only they are left. Their last words all read "the Furnace does not take 1/1s."
The whole holder-facing API, in full. If a function is not on this list it does not exist.
// anyone mint(uint256 qty) payable 0.0006 ETH each, max 20 per wallet activate(uint256 tokenId) burns 6,500 $ROBSTR, broker ON claimPayroll(uint256 tokenId) moves accrued stock into the broker's wallet redeem(uint256 tokenId) pays 1/N of every Reserve asset, burns the broker // views claimOf(uint256 tokenId) the exact per-asset payout, right now isActive(uint256 tokenId) ON / OFF weightOf(uint256 tokenId) sqrt(Book) × conviction reserveAssets() every line the Reserve holds tokenURI(uint256 tokenId) the SVG, computed on the spot // permissionless — the keeper calls these, so can you flushFees() treasury → 40 / 45 / 15 buyReserve() ETH → house basket, above threshold buyPayroll() ETH → desk baskets, above threshold buybackAndBurn() ETH → $ROBSTR → burned // events RetiredEarly(uint256 indexed id, string lastWords) ClockedIn(uint256 indexed id, uint256 burned) ClockedOut(uint256 indexed id)
There is no owner, no admin, no upgrade proxy, no pause, and no setter for any constant on this page.