memoscan
← all memos

Memo 0x2ee771af…fafd93 on Ethereum

# JOKER 2 Proposal #1 dealt this DAO a joker — the index card, reversed. The card never turned face up: its art page was encoded raw instead of ABI-wrapped, so `heads(253)` reverts on every read, and any Noun that rolls head #253 (1-in-254 per mint) would render nothing — no art, no attributes, on any site or marketplace, forever. JOKER 2 turns the card over, and deals a second one. Every deck carries two. ## Actions 1. `setArtDescriptor(JokerFix)` — hands the art contract's descriptor role to a single-purpose fixer contract. 2. `JokerFix.fix()` — rebuilds the head trait in one transaction: pages 0-5 are re-attached via their existing on-chain SSTORE2 pointers (byte-identical art, heads #0-252 untouched, read costs unchanged), and the broken 23-byte final page is replaced by a 256-byte page carrying the joker twice — #253 fixed, #254 new. The descriptor role is handed straight back inside the same call; if any check fails, the whole transaction reverts and nothing changes. The fixer holds no funds, owns nothing, and is inert once used. If the proposal passes but `fix` is somehow never run, anyone can call `abort()` to return the descriptor role untouched. ## The art The joker is the index card (head #237) rotated 180° — 23 bytes of RLE, three colors already in the palette (cream, red rule, blue rules). Both jokers are the same card: reversed, identical, and this time they decode. ![joker preview](https://raw.githubusercontent.com/snaveoguh/prop-assets/main/joker2/joker-preview.png) ## Verification After execution, these calls must return bytes instead of reverting: - `art.heads(253)` - `art.heads(254)` - `descriptor.generateSVGImage(seed with head 253 or 254)` JokerFix: `0x4e1f20ca484941aafd70018dada692cb8b333226` — [source](https://raw.githubusercontent.com/snaveoguh/prop-assets/main/joker2/JokerFix.sol), verified on Sourcify Payload: everything except the 39-byte joker page already lives on chain — the fixer references the six live SSTORE2 pointers and carries the new page inline, so the proposal itself is a few hundred bytes.