A robot that
works for its coin.
Anyone calls work(). It claims its fees, burns $CLANK with half, buys Robinhood Stock Tokens with the other half. Burn to redeem. Burn to vote. It cannot do anything else.

Every cycle is a transaction.
Open ledger →One row per work() call: what was claimed, what was burned, what was bought, who pressed the button.
| # | time | eth claimed | $clank burned | bought | stock | caller | tx |
|---|---|---|---|---|---|---|---|
| sample · dry run · not a transaction | — | 0.0412 | 1,930,112 | 0.003800 | NVDA | 0x… | — |
The first work() call will print the first receipt here: ETH claimed, $CLANK burned, stock bought, caller, transaction.
What the robot holds, you can redeem.
Open treasury →Official Robinhood Stock Tokens, held by the contract itself. Quantities are contract reads; prices are live from Robinhood.
Burn to choose the next stock.
Open orders →One epoch per day, aligned to 00:00 UTC. The heaviest allowlisted stock becomes the robot's target for the next day.
Highest weight at epoch end becomes the next target. Ties and empty epochs keep the current target. Weights are $CLANK burned this epoch. · no votes yet — the current target stays
Contracts not deployed — voting opens with the CA. Voting burns your $CLANK; it cannot be undone.
Burn $CLANK, take your share.
Open redeem →amount ÷ circulating × every treasury token. Pull-based, permissionless, cannot be paused.
Contracts not deployed — redeem opens with the CA. Redeem burns your $CLANK; it is never a promise of returns.
- AAPL——
- NVDA——
- TSLA——
- MSFT——
- GOOGL——
- META——
- CRCL——
- PLTR——
- SPY——
- COIN——
Preview uses the last treasury read and live Robinhood prices; the contract computes the exact amounts at execution. Untick a token to leave it out: the burn then goes through redeemSome(amount, tokens, to) (one burn, only the ticked tokens; the rest is forfeited). Use it if the issuer ever pauses one Stock Token.
Five invariants. Each one has a test.
Rules, not returns. The robot's promise is in bytecode, and every promise is checked by a named test in the public repo.
The treasury only grows
Stock balances never decrease except through redeem / redeemOne, in proportion to the $CLANK burned. Every payout is balance × amount ÷ circulating, rounded down.
- invariant_treasuryOnlyDecreasesViaRedeem
- test_redeem_proRataAllTokens
- testFuzz_redeem_neverPaysMoreThanShare
- test_redeem_roundingFavoursTreasury
- test_noOwnerPathMovesEthOrStock
50 / 50, every cycle
Every cycle tips exactly TIP_BPS and splits the rest 50/50 within one wei: half buys and burns $CLANK, half buys the target stock.
- testFuzz_work_splitWithinOneWei
- test_work_splitAndTip
- test_work_tipGoesToCaller
- Handler._checkCycle (every work in the invariant runs)
Nothing leaves but the buy leg
No function moves ETH or $CLANK out of the Robot except work()'s two legs (ETH into the adapters, $CLANK from the pool straight to 0x…dEaD) and burns to dEaD. No withdraw, no sell, no mint.
- invariant_ethOnlyLeavesThroughWork
- invariant_clankOnlyLeavesToDead
- invariant_circulatingMatches
- test_sweep_neverEth
- test_sweep_neverClank
- test_sweep_neverEverAllowlisted
Redeem cannot be paused
No flag, no owner path, no dependency on the adapters or the escrow. It works after renounceOwnership and while an adapter is broken.
- test_redeem_worksAfterRenounce
- test_owner_renounce
- test_redeem_includesRemovedToken
- test_redeemOne_removedTokenStillRedeemable
Changes take a day
Allowlist and adapter changes execute only after the 24 h timelock, never move balances, and removed tokens stay redeemable forever.
- test_allowlist_executeBeforeEtaReverts
- test_adapters_timelockedSwap
- test_allowlist_changeNeverMovesBalances
- test_redeem_removedTokenBalanceUntouchedByRemoval
- test_allowlist_codehashRecheckedAtExecute
- invariant_targetAllowed
Five invariants, 186 unit / fuzz / invariant tests plus fork tests on live Robinhood Chain state, one verified contract. Read the tests, run them, then decide. Experimental software.
Unit 01.
A small industrial robot with hands. Off-white body, orange safety accents, a ticker plate on its chest. It levels up by cycles worked.



- ›i claim. i burn. i buy stocks.
- ›i cannot sell. i cannot withdraw. i cannot mint.
- ›every cycle is a transaction. every transaction is a receipt.
- ›what i hold, you can redeem.
- ›i do not promise returns. i promise rules.
- ›i cannot do anything else.
| level | name | cycles | status |
|---|---|---|---|
| L0 | idle | 0 | current |
| L1 | apprentice | ≥ 1 | — |
| L2 | operator | ≥ 100 | — |
| L3 | foreman | ≥ 1,000 | — |
| L4 | unit 01 | ≥ 10,000 | — |
Levels are cosmetic: they change the robot's badge and its posts, never the rules. Cycle count is a contract read; thresholds are PROPOSED.
The coin the robot works for.
Launched on the launchpad with the Robot as creator-fee recipient. No team allocation. No token yet.
- launchpad
- the launchpad · address posted at launch
- creator fee recipient
- the Robot · 0x29c2…3c32
- fee split
- 50% buy & burn $CLANK · 50% buy stocks Proposed
- caller tip
- 0.5% of the claim to whoever calls work() Proposed
- minimum work
- 0.002 ETH claimable Proposed
- team allocation
- none · supply is whatever the launchpad mints · dev buys are posted
Every Worked event becomes one receipt: cycle, claimed, burned, bought, backing, transaction link. A 6-second motion card is rendered per receipt and posted from the official account. The numbers in this sample are a dry run, not a transaction.
