0x2cde…7c00

All memos sent from and to 0x2cde…7c00.

# 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.
# Joker — the 254th NounV2 head The first proposal to the NounV2 DAO adds a single new head trait: **joker**. Joker is the existing **index-card** head (`head` #237) exactly as-is, with one change: the **top red rule line and the bottom blue rule line are swapped**. Blue now sits at the top of the card, red at the bottom. Nothing else moves — same paper, same three-line spacing, same bounding box, same palette. It's a wildcard drawn from the deck we already had. ## What this does on-chain One transaction, executed by the NounV2 Treasury (which owns the descriptor): - **Target:** `NounsDescriptorV2` `0xAe0247…124B89` - **Call:** `addHeads(bytes,uint80,uint16)` — appends 1 head as index **253** - **Value:** 0 ETH No palette colours are added — joker reuses cream (`#fffdf2`), red (`#f38b7c`) and blue (`#a3baed`), all already on-chain. Existing Nouns are untouched; only future seeds can roll the new head. ## The exact bytes (verifiable) The head is a run-length-encoded image, appended verbatim by this proposal: ``` RLE (uncompressed, 23 bytes): 0x00071b14052c0c168d2c0c168d2c0c168d2c0c16392c0c DEFLATE-compressed payload passed to addHeads (15 bytes): 0x6360971661d5e111eb45c2963a3c00 decompressedLength = 23 imageCount = 1 ``` Diff vs index-card (`0x00071b1405 2c0c 1639 2c0c 168d 2c0c 168d 2c0c 168d 2c0c`): the first colour run `1639` (red, top line) and the last colour run `168d` (blue, bottom line) trade places. That is the entire change. ## Provenance The asset is permanent on Ethereum the moment this executes — the RLE bytes above live in the descriptor forever, CC0 like all Nouns art. Anyone can recompute the head from those 23 bytes; nothing here depends on an off-chain host. Previews at noun.wtf. ## Timeline Voting is open immediately for ~12 hours. If For > Against, anyone can `queue` it, then `execute` after a 12-hour timelock. Joker enters the rotation on the next mint after execution. *Deal 'em.* 🃏