Documentation

Every part of Beanhood, written down

4,444 ERC-721 tokens on Robinhood Chain. Trading fees from $BEAN are spent on four tokenized stocks and credited to every NFT by weight. No activation, no staking, no fee to earn. The collection is deployed and immutable. The payroll is written and tested but waits for $BEAN, for the reason given in section 06.

Collection
Not deployed
Payroll
Not deployed
$BEAN
Not launched
Audit
None
Chain
Robinhood · 4663
Overview

01What it is

The token $BEAN trades in a pool that charges 1% on every swap. 70% of that fee is the creator share, which works out to 0.7% of traded volume. It arrives in two assets, roughly half WETH, half $BEAN.

The WETH is spent on four tokenized stocks and credited to every NFT in the collection by weight. The $BEAN is sent to the creator wallet and burned in batches.

There is no activation, no staking, no lock-up and no fee to earn. An NFT earns from the block it is minted, without any further transaction from its owner.

Network

02Network

Chain
Robinhood Chain
Chain id
4663
Gas token
ETH
DEX
Uniswap V3
Explorer
robinhoodchain.blockscout.com

Adding the network is not something you have to do by hand. The connect button in the header offers to add it if your wallet does not have it yet.

Module

03The collection

Supply
4,444
Standard
ERC-721
Royalty
5%ERC-2981
Image
64 × 64 pxPNG, no background
Categories
7
Reveal
Nonevisible at mint

Seven trait categories: Background, Body, Outfit, Mouth, Eyes, Headwear and Tier. Six of them are appearance. The seventh, Tier, is the only one that touches money.

Bodies are materials rather than skin tones — Dough, Clay, Sand, Ash, Moss, Emberskin, Frostbitten, Gilded. Every one of the 4,444 combinations appears exactly once; both the images and the trait sets were checked for duplicates by hash before anything was uploaded.

Module

04Tier and weight

Payouts divide by weight, not per head. Tier is written into the metadata before mint, and the payroll stores it as three bits per token id — loaded once, then sealed permanently.

TierPiecesWeight Total weightShare of a round
Common2,66712,66731.6%
Uncommon1,11122,22226.3%
Rare44441,77621.0%
Epic17871,24614.8%
Legendary44125286.3%
Total4,4448,439100%

Weight cannot be raised. There is no burn-to-boost, no staking multiplier and no upgrade path. A Legendary earns twelve times a Common in every round, and there will never be a forty-fifth Legendary.

Module

05Minting

Random assignment No allowlist No reveal
Price
0.0001 ETH
Per wallet
10
Assignment
Randomdrawn at mint
Payment
ETHnative, no approval

Token ids are drawn at random from whatever is unminted, using a lazy Fisher-Yates shuffle that touches two storage slots per draw — the last mint costs the same as the first.

The randomness exists because the metadata is public before mint. A sequential mint would hand all 44 Legendaries to whichever bot read the file fastest.

Contract addresses cannot mint. A contract could mint, inspect what it drew, and revert until it landed a Legendary. Refusing contract callers closes that door, and also blocks Safe and other smart wallets as a side effect. Mint from a regular wallet.

Module

06The payroll

It is deployed after $BEAN launches, not before. The contract takes the token's address in its constructor and keeps it forever, and the function that moves the token half out is open to anyone — so pointing it at a placeholder would let the first caller drain whatever that placeholder turned out to be.

WETH accumulates in the payroll contract. Once the balance clears MIN_ROUND, anyone may call convert(), which buys all four stocks in equal quarters and credits every token at once.

Crediting uses an accumulator rather than a loop. Each purchase raises a single number per stock — earnings per unit of weight — and a token's balance is its weight multiplied by that number, minus whatever it has already withdrawn. A round therefore costs the same whether one bean exists or all 4,444 do, and no round is ever too small to pay everybody. Paying 4,444 tokens across four stocks the naive way would be 17,776 transfers.

To holders
100%of the WETH half
Team cut
None
Basket
4 stocks25% each, every round
Minimum round
0.01 ETH
Total weight
8,439
Who can run it
Anyone
Reference

07A round, worked

round converts        0.4 ETH
each stock receives   0.1 ETH        (25% each, no rotation)
total weight          8,439

one unit of weight    0.4 / 8,439  =  0.0000474 ETH of stock
Common    (weight  1)  0.0000474 ETH
Uncommon  (weight  2)  0.0000948 ETH
Rare      (weight  4)  0.000190  ETH
Epic      (weight  7)  0.000332  ETH
Legendary (weight 12)  0.000569  ETH

convert() is callable by any address. It is not a keeper, not a bot, and not a permission held by the deployer. The caller supplies the minimum acceptable output for each swap, so slippage is checked against a live quote rather than a value frozen at deployment.

Reference

08The route

Stocks on Robinhood Chain are quoted against USDG, not against ether. A direct WETH swap would route through almost nothing — the WETH/SPCX pool holds 0.0003 ETH while its USDG pool holds over half a million. Every purchase therefore takes two hops, and the path is fixed in the contract.

WETH --0.01%--> USDG --0.05%--> NVDA      629,496 USDG deep
                     --0.30%--> SPCX      505,002
                     --0.30%--> AAPL      103,342
                     --0.30%--> TSLA       99,919

Call pathTo(index) to read the exact bytes handed to the router. Nobody has to take our word for where the money goes.

Module

09Claiming

Stock is credited to the token, not to the wallet that held it when the round ran. claim(tokenId) transfers everything owed to the current owner; claimMany(ids) does several at once. Both are optional and there is no deadline.

Unclaimed stock therefore travels with the NFT. A bean that has never been claimed carries its whole accumulated balance to whoever buys it next — worth checking before you list, and worth checking before you buy.

The holdings page reads what each of your beans is owed and claims them in one transaction.

Module

10$BEAN

Pair
$BEAN / ETH
Pool fee
1%per swap
Creator share
70%of the pool fee

Until $BEAN is trading there is no pool, no fee and no round. The creator share is set at launch and cannot be changed afterwards.

The token half of the fees is held in the creator wallet and burned in batches.

Reference

11Every function

FunctionWho can callWhat it does
mint(qty)ANYONEAny wallet, not a contract Draws that many random unminted ids and transfers them to the caller.
convert(minOut)ANYONEAny address Swaps the accumulated WETH into the four stocks and credits every token by weight.
claim(id)HOLDERThe current owner of that token Transfers everything the token is owed, in all four stocks.
claimMany(ids)HOLDERThe current owner of each token The same, for several tokens in one transaction.
sweepBean()ANYONEAny address Pushes the $BEAN half of the fees to its one fixed destination. It can go nowhere else.
owed(id)Read-only What a token could withdraw right now, in basket order.
weightOf(id)Read-only The token's weight, 1 to 12.
tierOf(id)Read-only The token's tier, 0 Common through 4 Legendary.
pathTo(i)Read-only The exact swap path for stock i, so the route can be checked off-chain.
roundsRun()Read-only How many rounds have been converted so far.
loadTiers(...)SETUP ONLYInstaller, before sealing Writes the tier table. Refused afterwards, by anyone, forever.
seal()SETUP ONLYInstaller, once Closes the tier table permanently. convert() refuses to run until this is done.

There is no setOwner, no setFee, no withdraw on the payroll and no upgrade path. The list above is complete.

Reference

12Addresses

Beanhood

ContractAddress
Collectionnot deployed
Payrollnot deployed
$BEANnot launched

The basket

Several tokens on this chain share these symbols. The four below are the official Robinhood Token contracts and are immutable in the payroll — they are the only four it can ever buy.

StockAddressShare

Infrastructure

NameAddress
Uniswap SwapRouter020xcaf681a66d020601342297493863e78c959e5cb2
Uniswap V3 Factory0x1f7d7550b1b028f7571e69a784071f0205fd2efa
QuoterV20x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7
WETH0x0bd7d308f8e1639fab988df18a8011f41eacad73
USDG0x5fc5360d0400a0fd4f2af552add042d716f1d168

The explorer lists more than one contract called "Wrapped Ether". The WETH above is the one Uniswap's own deployment actually routes through, confirmed against the router rather than against a token list.

Reference

13Settings

SettingValueChangeable after deploy
Supply4,444No
Mint price0.0001 ETHNo
Per wallet10No
Royalty5%, ERC-2981No
Pool fee1%No
Creator share of pool fee70%No
To holders100% of the WETH halfNo
Basket split25% each, every roundNo
Stock addressesFixed in the constructorNo
Swap route and fee tiersFixed in the constructorNo
Tier weights1 · 2 · 4 · 7 · 12No
Total weight8,439No
Minimum round0.01 ETHNo
Tier tableLoaded once, then sealedNo, after sealing
Metadata base URIIPFSNo
ChainRobinhood Chain, id 4663No
Reference

14What cannot change

  • The payroll has no owner, no setter and no upgrade path. Nothing in these docs can be altered after deployment, including by us.
  • Stock addresses, the swap route and the pool fee tiers are immutable, set in the constructor.
  • The tier table can be written only by the deploying address, only before sealing, and never again. convert() refuses to run until it is sealed, so no round can happen against a half-written table.
  • convert() is permissionless, so the payroll cannot be stopped by the team losing interest.
  • Slippage limits come from the caller, from a live quote, rather than being frozen at deployment.
  • The $BEAN half of the fees can only ever move to one address, fixed at deployment.
  • No audit. The contracts compile clean, but no third party has reviewed them.
Reference

15Known limits

Stated here rather than discovered later.

  • No fees until the token trades. Nothing accrues before $BEAN has a live market, and if it never gets one there is never a payroll.
  • Payout tracks volume. At low volume a round can be worth less than the gas required to claim it.
  • The $BEAN half is held, not burned on arrival. It goes to the creator wallet and is burned in batches. The destination is fixed at deployment; the timing is not. This is the one part of the system that still requires trust, and the wallet is public so it can be watched.
  • Stock can fall. The payroll buys at market price. It accumulates stock; it does not promise the stock rises.
  • Smart wallets cannot mint, for the reason given in section 05.
  • Royalties are not enforceable. ERC-2981 is honoured at each marketplace's discretion.
  • Unaudited and immutable at once. A bug found later cannot be patched later. Mint small.