Files
zeekay 2ef4b7e322 genesis-nft: verify Ethereum set from chain, derive the canonical #1-#100 registry, pin the #33 defect
Ethereum Media 0x31e0F919 probed live at block 25612642: 50 tokens, ids 1-50
contiguous, zero duplicates, zero malformed/truncated tokenURIs, all 50 with a
non-zero content hash. The "~43 interrupted URIs" in the task backlog does not
exist on chain and has no counterpart in the broadcast record. The only Ethereum
defect is that every tokenURI names lux.town, which has no nameservers — and that
CANNOT be fixed on chain: the deployed Zora-fork Media has no setTokenURI, no
setBaseURI and no owner override, only updateTokenURI gated onlyApprovedOrOwner.
The repair is the client-side host rewrite to cdn.lux.network, already live.

The 9 treasury duplicates were real, and the deployed fix was only half applied.
MintTreasuryValidators minted a naive consecutive #33-#100 instead of the 68-serial
complement; nine collided; FixTreasuryNumbers renumbered them but templated all
nine payloads off validator #33 and edited only `name`. Every one kept
"Validator No": 33 and artwork reading "VALIDATOR #33 / 100", so the pre-reset
collection had TEN tokens rendering as #33. The existing verification passed
because it only ever read `name`.

Root cause: the serial was materialised 127 times as ~450 KB of literal base64
across three Solidity scripts. Fix: one registry holds each serial once, one
renderer derives the metadata.

  data/eth-genesis-inventory.json  live Ethereum state (generated, re-checkable)
  data/genesis-registry.json       canonical 118 rows: 100 validators #1-#100 + 18 coins
  scripts/probe-eth-genesis.mjs    eth_call/eth_getCode only, cannot send a tx
  scripts/gen-genesis-registry.mjs invariants: serials {1..100}, treasury set =
                                   {1..100} \ ETH validators, bonds match the ETH
                                   tokenURI, totalLuxLocked 102,583,000,000
  scripts/genesis-metadata.mjs     the ONE renderer (one SVG template)
  scripts/verify-genesis-metadata.mjs
                                   118/118 deployed payloads reproduced byte-for-byte;
                                   the 9 defective ones pinned as a regression test
  scripts/gen-remint-plan.mjs      un-executed re-mint plan; mints each treasury
                                   validator AT its canonical serial, so no
                                   renumber step exists to get half-applied

No transaction is sent by anything in this repo. C-Chain 0x004287C4 confirmed
wiped (eth_getCode = 0x) — the re-mint remains owner-gated and deferred.
2026-07-25 15:18:37 -07:00

14 KiB
Raw Permalink Blame History

Genesis NFT Migration Map — Ethereum → Lux C-Chain (token by token)

Generated file. Do not hand-edit. Regenerate with python3 data/gen_migration_map.py (source of truth: ethereum/HOLDER-SNAPSHOT.md + data/cchain-current.json). Machine- readable form: data/migration-map.json.

  • Ethereum Media (LUXNFT): 0x31e0F919C67ceDd2Bc3E294340Dc900735810311 — snapshot block 25443474
  • Lux C-Chain GenesisNFTs (chain 96369): 0x004287C47efc912FEc391979154454a8017A76C6
  • Treasury / DAO wallet: 0x9011E888251AB053B7bD1cdB598Db4f9DEd94714

Every check below is enforced by the generator (build fails otherwise):

  • ETH token N re-mints 1:1 to C-Chain token N−1 (C-Chain ids start at 0), originTokenId preserved, minted to the same holder — owner equality verified for all 50.
  • A Coin's C-Chain tier name matches its Ethereum bond exactly (GENESIS COIN=1B, VALIDATOR COIN=100M, MINI COIN=10M, NANO COIN=1M).
  • The 100 Genesis-Validator serial numbers are exactly #1–#100 — no gaps, no duplicates. ⚠️ This check reads the name field only. Nine treasury tokens passed it while carrying a stale Validator No trait and stale on-chain artwork — see HISTORY.md (2026-07-09, item 2). Agreement between name, trait and art is enforced separately by scripts/verify-genesis-metadata.mjs.

Part 1 — Original holders (ETH #1–50 → C-Chain #0–49, 1:1)

ETH # C-Chain # Class Tier Bond (LUX) C-Chain name Holder (owner verified ✓)
1 0 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #1 0x8d56c7cf8b17a11580822c7fff90b05b6a3e1b5e
2 1 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #2 0x8d56c7cf8b17a11580822c7fff90b05b6a3e1b5e
3 2 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #3 0x8d56c7cf8b17a11580822c7fff90b05b6a3e1b5e
4 3 coin NANO 1,000,000 NANO COIN #4 0x8d56c7cf8b17a11580822c7fff90b05b6a3e1b5e
5 4 coin MINI 10,000,000 MINI COIN #5 0x8d56c7cf8b17a11580822c7fff90b05b6a3e1b5e
6 5 coin VALIDATOR 100,000,000 VALIDATOR COIN #6 0x8d56c7cf8b17a11580822c7fff90b05b6a3e1b5e
7 6 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #7 0x31387d95334f7c45391410e1c43dadacfc889f4a
8 7 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #8 0xb7c5819f928a02ff3946b369d997e1d52712bf41
9 8 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #9 0xb7c5819f928a02ff3946b369d997e1d52712bf41
10 9 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #10 0xb7c5819f928a02ff3946b369d997e1d52712bf41
11 10 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #11 0xe00a0921ce8bc7525383383b247f568fd01e53fa
12 11 coin GENESIS 1,000,000,000 GENESIS COIN #12 0xb7c5819f928a02ff3946b369d997e1d52712bf41
13 12 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #13 0xb7c5819f928a02ff3946b369d997e1d52712bf41
14 13 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #14 0x9df3f0e20e4e1f1eed635ba6f7dc2612dd4e1fbf
15 14 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #15 0xb7c5819f928a02ff3946b369d997e1d52712bf41
16 15 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #16 0xb7c5819f928a02ff3946b369d997e1d52712bf41
17 16 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #17 0xb7c5819f928a02ff3946b369d997e1d52712bf41
18 17 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #18 0xcbe29430026b8dc840cabc25745dd1106253d333
19 18 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #19 0xb7c5819f928a02ff3946b369d997e1d52712bf41
20 19 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #20 0xb7c5819f928a02ff3946b369d997e1d52712bf41
21 20 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #21 0x7438d25f78da4b184466a04a40d45dcdf9d44158
22 21 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #22 0x70c91206b85d9d42fc0a5c0c79705931ab7d5881
23 22 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #23 0x3ef096e10358363fd6cf2cf6052079d5467a12f3
24 23 coin MINI 10,000,000 MINI COIN #24 0x3ef096e10358363fd6cf2cf6052079d5467a12f3
25 24 coin MINI 10,000,000 MINI COIN #25 0x515e3c5d738e62d8b800f5f87abff284d77cbb4e
26 25 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #26 0x111e89e354f48c324a8d2ca9873c028798aaa290
27 26 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #27 0x497ec62bdc58d003faf38f3c132302692fe687fd
28 27 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #28 0x5945d401dd63bfbb3c67824d72b8fca1e3f8f6e4
29 28 coin VALIDATOR 100,000,000 VALIDATOR COIN #29 0x5945d401dd63bfbb3c67824d72b8fca1e3f8f6e4
30 29 coin MINI 10,000,000 MINI COIN #30 0x3ef096e10358363fd6cf2cf6052079d5467a12f3
31 30 coin MINI 10,000,000 MINI COIN #31 0xaa64006a3a14e16d58933c1fad7ff4f1468c5efd
32 31 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #32 0xd8f3c05fb24cb1ab19a11b7b032c9a5a914640bc
33 32 coin VALIDATOR 100,000,000 VALIDATOR COIN #33 0x908a311766ffb525ec05c75b884ee00a620d94d2
34 33 coin VALIDATOR 100,000,000 VALIDATOR COIN #34 0x908a311766ffb525ec05c75b884ee00a620d94d2
35 34 coin GENESIS 1,000,000,000 GENESIS COIN #35 0x094109ab78767713305d2e5cd05d832cd1faefb5
36 35 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #36 0x094109ab78767713305d2e5cd05d832cd1faefb5
37 36 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #37 0x366887642858e2b0c4faf7226a1462aae53e41a2
38 37 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #38 0x469796eef1154ef2d0a2d2d8815771d7264a5ff6
39 38 coin MINI 10,000,000 MINI COIN #39 0x1e3a17775d0d0cfefb09f869617f1d22e0fd9f6c
40 39 coin VALIDATOR 100,000,000 VALIDATOR COIN #40 0x515e3c5d738e62d8b800f5f87abff284d77cbb4e
41 40 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #41 0x8750d110d594405b788d98e1376e9841555252c2
42 41 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #42 0x5b6a8eb3added38e01543eb09437cfcbe7b0ddae
43 42 coin MINI 10,000,000 MINI COIN #43 0x0315b3892dea66a5ddbd6e6b7ad6492490ad10bf
44 43 coin NANO 1,000,000 NANO COIN #44 0x0315b3892dea66a5ddbd6e6b7ad6492490ad10bf
45 44 coin NANO 1,000,000 NANO COIN #45 0x0315b3892dea66a5ddbd6e6b7ad6492490ad10bf
46 45 coin MINI 10,000,000 MINI COIN #46 0x24fdff1c4f9222ec941e7f8da54f0922f5108433
47 46 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #47 0x77f495ddbe4892bbd6400404c508448e216c7586
48 47 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #48 0xb4699dc301ca712e3d852e69ebe3f7dfbb0ad4b6
49 48 validator GENESIS 1,000,000,000 GENESIS VALIDATOR #49 0x2f6a1ce06263f499d600893435e00ea351b765f0
50 49 validator GENESIS 1,000,000,000 (art/metadata restored) 0x3bcaed65fd2a3296ae448ec28f3067071378c3fd

Original-holder subtotal: 32 Genesis Validators + 18 Coins = 50 tokens, across 28 distinct wallets. Bonded reserve carried over 1:1 = 34,583,000,000 LUX.

Part 2 — Treasury completion (C-Chain #50–117 → authorized Validators #1–100)

The Ethereum drop authorized 100 Genesis Validators but only 32 were sold. On 2026-07-09 the 68 unminted validators were minted to the DAO treasury, filling every remaining serial so the collection holds exactly #1–#100. The serials the treasury filled ≤ #50 are precisely the Ethereum tokenIds that had been spent on Coins (verified) — the rest complete #51–#100.

C-Chain # Validator serial Class Bond (LUX) Owner (treasury)
50 #33 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
51 #34 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
52 #35 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
53 #4 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
54 #5 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
55 #6 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
56 #39 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
57 #40 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
58 #12 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
59 #24 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
60 #43 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
61 #44 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
62 #45 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
63 #46 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
64 #25 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
65 #29 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
66 #30 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
67 #31 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
68 #51 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
69 #52 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
70 #53 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
71 #54 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
72 #55 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
73 #56 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
74 #57 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
75 #58 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
76 #59 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
77 #60 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
78 #61 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
79 #62 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
80 #63 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
81 #64 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
82 #65 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
83 #66 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
84 #67 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
85 #68 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
86 #69 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
87 #70 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
88 #71 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
89 #72 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
90 #73 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
91 #74 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
92 #75 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
93 #76 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
94 #77 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
95 #78 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
96 #79 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
97 #80 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
98 #81 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
99 #82 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
100 #83 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
101 #84 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
102 #85 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
103 #86 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
104 #87 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
105 #88 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
106 #89 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
107 #90 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
108 #91 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
109 #92 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
110 #93 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
111 #94 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
112 #95 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
113 #96 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
114 #97 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
115 #98 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
116 #99 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714
117 #100 validator 1,000,000,000 0x9011e888251ab053b7bd1cdb598db4f9ded94714

Treasury subtotal: 68 Genesis Validators (serials #4, #5, #6, #12, #24, #25 … #100), all held by the DAO treasury.

Totals after migration

Validators Coins Total
Original holders (people) 32 18 50
Treasury completion 68 0 68
On-chain today 100 18 118
Authorized (ETH Drop) 100 11,111 11,211 + 1,000 ATM/Card

Recorded totalLuxLocked on GenesisNFTs = 102,583,000,000 LUX (100 validators × 1B = 100,000,000,000 + 18 coins = 2,583,000,000).