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.
Fully on-chain art. Provenance hash drops before reveal. Team reserve hard-capped at 20 — can’t be minted around. NFT contract: 0xcc98…d4b8
Free mint · 1 per wallet · live on OpenSea. Gas token is ETH. Not financial advice.
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.
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).
Every Monk gets its own Tokenbound Account (ERC-6551). Bind via registry → tbaOf(tokenId). Owner or TBA can claim.
TitheVault + RoyaltyRouter. openEpoch(root, tokens) · claim(...) · harvestUSDG. ERC-2981 receiver points at the router.
ActivityOracle + RwaEventReporter. refreshRwa(id) · reportStake · recordEvent. Points decide the weekly ranking.
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.
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.
Tap a body to reroll its curse. Every Monk is unique — generated 100% from code.
Every Monk gets an ERC-6551 account. Stake the NFT or act through its TBA. Unstake whenever.
Stake-time + activity reported on-chain via ActivityOracle. refreshRwa keeps the score live.
Keeper snapshots FeedCurse, ranks by points, packs Merkle leaves (with curse BPS), opens epoch. Claim from TitheVault.
5% ERC-2981 → RoyaltyRouter → harvestUSDG. Restricted regions settle leaf in USDG. Attest is self-hash, not KYC.
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).
| Rec | Contract | Call this |
|---|---|---|
| 1 TBA wallet | DeadMonkAccount + ERC6551Registry | registry.bind(tokenId) → tbaOf(tokenId) |
| 2 Tithe / royalties | TitheVault + RoyaltyRouter | openEpoch(root, tokens) · claim(...) · harvestUSDG |
| 3 RWA score | ActivityOracle + RwaEventReporter | refreshRwa(id) · reportStake · recordEvent |
| 4 Chainlink curse | FeedCurse + CurseRenderer | setFeed · snapshot · liveMultiplierBps · traitJson |
| 5 Identity | DeadMonksRegistry | isMonkHolder · isMonk · tbaOf · setHoldersRoot |
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
| Tree | Leaf |
|---|---|
| TitheVault epoch | keccak256(abi.encodePacked(uint256 tokenId, address token, uint256 amount)) |
| Holders root | keccak256(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.
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.
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.