// A graveyard on Robinhood L2

DEAD
MONKS

They aped the top. The chain rugged them back. Now 444 code-born 32×32 souls have clawed out of the mempool — and they remember exactly who sold. TBA wallets. RWA scoring. Chainlink curse. Weekly tithe.

444Fixed supply
32×32Code-generated
70Traits
15Paid weekly
Public mint

Enter the graveyard

Fully on-chain art. Provenance hash drops before reveal. Team reserve hard-capped at 20 — can’t be minted around. NFT contract: 0xcc98…d4b8

NETWORKRobinhood L2
PRICEFREE
MAX / WALLET1
QUANTITY
1
MINTED0 / 444
Mint on OpenSea

Free mint · 1 per wallet · live on OpenSea. Gas token is ETH. Not financial advice.

Stake to survive

The weekly tithe

A Monk left idle just decays. Stake it (or bind its TBA). Climb the board via ActivityOracle. Top 15 split the pool via Merkle claim on TitheVault — no admin key touching funds. Royalties route through RoyaltyRouter.

$500
SPLIT 15 WAYS · EVERY WEEK
NEXT EPOCH
00:00:00:00
RANKINGStake-time + RWA activity
CLAIMOn-chain Merkle (TitheVault)
ROYALTY5% → RoyaltyRouter
RWA Update

Modules that sit next to the live 444

Do not upgrade the original collection contract. These modules live beside it. Gas is ETH. Stock Tokens are ERC-20 debt securities (not for US persons).

01

TBA Wallet

Every Monk gets its own Tokenbound Account (ERC-6551). Bind via registry → tbaOf(tokenId). Owner or TBA can claim.

02

Tithe / Royalties

TitheVault + RoyaltyRouter. openEpoch(root, tokens) · claim(...) · harvestUSDG. ERC-2981 receiver points at the router.

03

RWA Score

ActivityOracle + RwaEventReporter. refreshRwa(id) · reportStake · recordEvent. Points decide the weekly ranking.

04

Chainlink Curse

FeedCurse + CurseRenderer. setFeed · snapshot · liveMultiplierBps · traitJson. Multiplier applied to leaf amounts.

Identity layer: DeadMonksRegistry (isMonkHolder · isMonk · tbaOf · setHoldersRoot). Keepers: anyone can snapshot + refreshRwa; only owner opens the epoch. Harvest with explicit minOuts — never 0.

Origin story

The rug that killed them

Every one of them died the same way every degen dies — believing the top wasn’t the top. Some got liquidated at 3AM staring at a chart that only went one way. Some held through the rug because “it’s just a dip.” Some sold the exact bottom, watched the pump from the sidelines, and never recovered.

The chain doesn’t forgive a bad trade. It doesn’t forget one either — it just buries it, block by block, forever.

444 of them never made it off-chain. So instead, they came back on it. 32×32 pixels. Four ways to come back wrong. Seventy ways to stay cursed. Now they have TBAs, RWA scores, and a Chainlink curse that follows them.

What clawed back

Four ways to come back wrong

Tap a body to reroll its curse. Every Monk is unique — generated 100% from code.

70 ways to be cursed

Nobody comes back the same

The money loop

Holding it does something

01

Bind TBA + Stake

Every Monk gets an ERC-6551 account. Stake the NFT or act through its TBA. Unstake whenever.

02

Earn RWA points

Stake-time + activity reported on-chain via ActivityOracle. refreshRwa keeps the score live.

03

Top 15 claim

Keeper snapshots FeedCurse, ranks by points, packs Merkle leaves (with curse BPS), opens epoch. Claim from TitheVault.

04

Royalties + USDG

5% ERC-2981 → RoyaltyRouter → harvestUSDG. Restricted regions settle leaf in USDG. Attest is self-hash, not KYC.

Developer short guide

RWA modules — full reference

Sit these modules next to the live 444 NFT. Do not upgrade the original collection contract. Gas token is ETH. Stock Tokens are ERC-20 debt securities (not for US persons).

1 · What ships

RecContractCall this
1 TBA walletDeadMonkAccount + ERC6551Registryregistry.bind(tokenId) → tbaOf(tokenId)
2 Tithe / royaltiesTitheVault + RoyaltyRouteropenEpoch(root, tokens) · claim(...) · harvestUSDG
3 RWA scoreActivityOracle + RwaEventReporterrefreshRwa(id) · reportStake · recordEvent
4 Chainlink curseFeedCurse + CurseRenderersetFeed · snapshot · liveMultiplierBps · traitJson
5 IdentityDeadMonksRegistryisMonkHolder · isMonk · tbaOf · setHoldersRoot

2 · Deploy order

ERC6551Registry → DeadMonkAccount → DeadMonksRegistry(nft, registry, impl, salt) → ActivityOracle → FeedCurse → TitheVault → RoyaltyRouter(vault) → CurseRenderer → RwaEventReporter.

Then: setChainId only if not 4663; setFeed + setPrimary; setRwaTokens([Stock Tokens, USDG]); setReporter; setBasket + setRouter; point ERC-2981 receiver at RoyaltyRouter; bind(1..444); consider locking setAccountConfig.

NFT (OpenSea): 0xcc9868d1172f188433f7fcceaaf3afb384edd4b8
USDG: 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168

3 · Leaves and claims

TreeLeaf
TitheVault epochkeccak256(abi.encodePacked(uint256 tokenId, address token, uint256 amount))
Holders rootkeccak256(abi.encodePacked(address holder, uint256 tokenId))

Build trees with scripts/merkle.mjs and scripts/holders-root.mjs (must match the on-chain sorted-pair hasher). Amount should already include curse BPS / 10_000. Current Monk owner or that Monk’s TBA may claim. Sold mid-epoch: new owner claims. Restricted regions: pay the leaf in USDG; attest() is a self-hash, not KYC.

4 · Keeper loop

Each epoch: FeedCurse.snapshot() → refreshRwa on active Monks → rank by pointsOf → pack top 15 amounts → merkle.mjs → TitheVault.openEpoch(root, tokens).

Anyone may snapshot and refreshRwa. Only owner opens the epoch. Harvest royalties with explicit minOuts per basket leg. Never harvest with minOut = 0.

5 · Do not

  • Do not pass a caller-chosen token list into scoring (removed).
  • Do not mix OpenZeppelin StandardMerkleTree with these leaves.
  • Do not assume Uniswap V3 ABI on Robinhood — confirm deadline field before deploying the adapter.
  • Do not treat raw Stock Token units as USD.
  • Do not put real Stock Token balances behind this until an independent audit.
  • Confirm token ids are 1..444 on-chain before bind-all.
Lite paper

Why this, not the other 10,000

  • Fixed supply, fixed reserve. 444 forever. Team gets 20, hard-capped in the contract.
  • Real weekly payout. TitheVault claim function — not a Discord announcement. Merkle + curse BPS.
  • TBA + RWA scoring. Every Monk has its own account. Activity is on-chain and rankable.
  • Art you can audit. Provenance hash published before mint. We can’t switch the reveal.
  • Public source. Read the contracts yourself. Don’t trust the copy.

The honest part

Contracts are written to production standard but not yet independently audited — that happens before real Stock Token balances or significant funds are ever at risk.

This is a collectible with a payout mechanic, not an investment. Stock Tokens are debt securities and not available to US persons. Price can go to zero. DYOR. Nothing here is financial advice.

GM TO THE ONES WHO MADE IT BACK
NGMI IS JUST WAGMI THAT HASN’T LOADED YET
Wallet connect ships with the contract. You’re early.