Files
migration/proof/ownership-fork-e2e-PASS.log
zeekay db5d60fe08 docs(migration): ownership consolidation is SOLVED — runbook, manifest, proof
SWEEP-RUNBOOK previously recorded ownership as BLOCKED: the 0xce15 key was
unlocated, so the step emitted calldata and was a no-op. That is no longer the
state, and the runbook said otherwise.

Adds OWNERSHIP-RUNBOOK.md with two paths that together move the ENTIRE mainnet
(96369) DEX to the DAO Safe:
  Path A — a StateUpgrade re-owns the 23 contracts whose keys are lost or
           unknown (0xce15, 0xbe7A89, 0x086F4aA1), fork-proven 109/109
  Path B — direct transfer of the 74 LP NFTs + 7 ERC-20 balances from 0x9011

Ships the artifacts that back the claim rather than the claim alone:
manifests/96369-ownership.stateupgrade.json (the storage writes),
proof/ownership-fork-e2e-PASS.log (the fork run), and the program/ scripts for
both paths.

The manifest holds contract STORAGE SLOT writes — 64-hex slot ids mapping to
owner addresses, with blockTimestamp left as __OWNERSHIP_MIGRATION_TS__.
Checked explicitly, because slot ids and private keys are indistinguishable to
a naive scan: there are no keys here. The runbook references k8s secret names
and KMS paths only.
2026-07-26 08:53:15 -07:00

146 lines
13 KiB
Plaintext

0. select caught-up mainnet node
fork base head=1082842 http://129.212.164.46:9630/ext/bc/C/rpc
manifest: /Users/z/work/lux/migration/manifests/96369-ownership.stateupgrade.json
1. start anvil fork at head
PASS: fork chainId
parsed 23 storage edits across 23 contracts
2. PRE snapshot — every manifest contract owned by a NON-Safe key; token metadata
PASS: PRE 0x0e4bd0dd67c15DECFbBBDBbE07Fc9d51D737693D owner != Safe (now 0xbe7A89F41fA7371b856b9685Dd025d0BCC6C7a25)
PASS: PRE 0x1af00a2590a834d14f4a8a26d1b03ebba8cf7961 owner != Safe (now 0x086F4aA1a49B193D49e5bBb462E1554Cfb419040)
PASS: PRE 0x1E48D32a4F5e9f08DB9aE4959163300FaF8A6C8e owner != Safe (now 0xbe7A89F41fA7371b856b9685Dd025d0BCC6C7a25)
PASS: PRE 0x26B40f650156C7EbF9e087Dd0dca181Fe87625B7 owner != Safe (now 0xbe7A89F41fA7371b856b9685Dd025d0BCC6C7a25)
PASS: PRE 0x28BfC5DD4B7E15659e41190983e5fE3df1132bB9 owner != Safe (now 0xbe7A89F41fA7371b856b9685Dd025d0BCC6C7a25)
PASS: PRE 0x3078847F879A33994cDa2Ec1540ca52b5E0eE2e5 owner != Safe (now 0xbe7A89F41fA7371b856b9685Dd025d0BCC6C7a25)
PASS: PRE 0x3141b94b89691009b950c96e97Bff48e0C543E3C owner != Safe (now 0xbe7A89F41fA7371b856b9685Dd025d0BCC6C7a25)
PASS: PRE 0x3569c06a80c148d7b4b67f8a06125f6d59774243 owner != Safe (now 0xce15D0AC1dd7f0Da84d65AAA40717E0c60d9fE36)
PASS: PRE 0x5E5290f350352768bD2bfC59c2DA15DD04A7cB88 owner != Safe (now 0xbe7A89F41fA7371b856b9685Dd025d0BCC6C7a25)
PASS: PRE 0x60E0a8167FC13dE89348978860466C9ceC24B9ba owner != Safe (now 0xbe7A89F41fA7371b856b9685Dd025d0BCC6C7a25)
PASS: PRE 0x6EdcF3645DeF09DB45050638c41157D8B9FEa1cf owner != Safe (now 0xbe7A89F41fA7371b856b9685Dd025d0BCC6C7a25)
PASS: PRE 0x724f4ef0400386fc8c1011788af733bd367ac00f owner != Safe (now 0xce15D0AC1dd7f0Da84d65AAA40717E0c60d9fE36)
PASS: PRE 0x79608e442d046ea6d3125931a33ce971ad99c6f9 owner != Safe (now 0xce15D0AC1dd7f0Da84d65AAA40717E0c60d9fE36)
PASS: PRE 0x8031e9b0d02a792cfefaa2bdca6e1289d385426f owner != Safe (now 0xce15D0AC1dd7f0Da84d65AAA40717E0c60d9fE36)
PASS: PRE 0x80bBc7C4C7a59C899D1B37BC14539A22D5830a84 owner != Safe (now 0xce15D0AC1dd7f0Da84d65AAA40717E0c60d9fE36)
PASS: PRE 0x848Cff46eb323f323b6Bbe1Df274E40793d7f2c2 owner != Safe (now 0xbe7A89F41fA7371b856b9685Dd025d0BCC6C7a25)
PASS: PRE 0x8B982132d639527E8a0eAAD385f97719af8f5e04 owner != Safe (now 0xbe7A89F41fA7371b856b9685Dd025d0BCC6C7a25)
PASS: PRE 0xa85eb8e163f4d70bfc43a4f3fcc9a8dfc42b1ae4 owner != Safe (now 0xce15D0AC1dd7f0Da84d65AAA40717E0c60d9fE36)
PASS: PRE 0xaa6a41cacb18bed5b98059a5fa30f9dbabe0cc64 feeToSetter != Safe (now 0xce15D0AC1dd7f0Da84d65AAA40717E0c60d9fE36)
PASS: PRE 0xD173926A10A0C4eCd3A51B1422270b65Df0551c1 feeToSetter != Safe (now 0xce15D0AC1dd7f0Da84d65AAA40717E0c60d9fE36)
PASS: PRE 0xdf1de693c31e2a5eb869c329529623556b20abf3 owner != Safe (now 0xce15D0AC1dd7f0Da84d65AAA40717E0c60d9fE36)
PASS: PRE 0xeac0a50112b5ee20cc18e42ba4d37777012afd0d feeToSetter != Safe (now 0xce15D0AC1dd7f0Da84d65AAA40717E0c60d9fE36)
PASS: PRE 0xf5a313885832d4fc71d1ef80115197c4479b58c8 owner != Safe (now 0x086F4aA1a49B193D49e5bBb462E1554Cfb419040)
3. APPLY manifest words via anvil_setStorageAt (simulates the fork-block StateUpgrade)
set 0x80bBc7C4C7a59C899D1B37BC14539A22D5830a84[0x0000000000000000000000000000000000000000000000000000000000000003]=0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2
set 0xD173926A10A0C4eCd3A51B1422270b65Df0551c1[0x0000000000000000000000000000000000000000000000000000000000000001]=0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2
set 0xeac0a50112b5ee20cc18e42ba4d37777012afd0d[0x0000000000000000000000000000000000000000000000000000000000000001]=0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2
set 0xaa6a41cacb18bed5b98059a5fa30f9dbabe0cc64[0x0000000000000000000000000000000000000000000000000000000000000001]=0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2
set 0xdf1de693c31e2a5eb869c329529623556b20abf3[0x0000000000000000000000000000000000000000000000000000000000000005]=0x000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce212
set 0x8031e9b0d02a792cfefaa2bdca6e1289d385426f[0x0000000000000000000000000000000000000000000000000000000000000005]=0x000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce212
set 0x79608e442d046ea6d3125931a33ce971ad99c6f9[0x0000000000000000000000000000000000000000000000000000000000000005]=0x000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce212
set 0xa85eb8e163f4d70bfc43a4f3fcc9a8dfc42b1ae4[0x0000000000000000000000000000000000000000000000000000000000000005]=0x000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce212
set 0x724f4ef0400386fc8c1011788af733bd367ac00f[0x0000000000000000000000000000000000000000000000000000000000000005]=0x000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce212
set 0x3569c06a80c148d7b4b67f8a06125f6d59774243[0x0000000000000000000000000000000000000000000000000000000000000005]=0x000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce212
set 0x60E0a8167FC13dE89348978860466C9ceC24B9ba[0x0000000000000000000000000000000000000000000000000000000000000005]=0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2
set 0x1E48D32a4F5e9f08DB9aE4959163300FaF8A6C8e[0x0000000000000000000000000000000000000000000000000000000000000005]=0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2
set 0x848Cff46eb323f323b6Bbe1Df274E40793d7f2c2[0x0000000000000000000000000000000000000000000000000000000000000005]=0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2
set 0x5E5290f350352768bD2bfC59c2DA15DD04A7cB88[0x0000000000000000000000000000000000000000000000000000000000000005]=0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2
set 0x26B40f650156C7EbF9e087Dd0dca181Fe87625B7[0x0000000000000000000000000000000000000000000000000000000000000005]=0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2
set 0x6EdcF3645DeF09DB45050638c41157D8B9FEa1cf[0x0000000000000000000000000000000000000000000000000000000000000005]=0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2
set 0x28BfC5DD4B7E15659e41190983e5fE3df1132bB9[0x0000000000000000000000000000000000000000000000000000000000000005]=0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2
set 0x3078847F879A33994cDa2Ec1540ca52b5E0eE2e5[0x0000000000000000000000000000000000000000000000000000000000000005]=0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2
set 0x8B982132d639527E8a0eAAD385f97719af8f5e04[0x0000000000000000000000000000000000000000000000000000000000000005]=0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2
set 0x3141b94b89691009b950c96e97Bff48e0C543E3C[0x0000000000000000000000000000000000000000000000000000000000000005]=0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2
set 0x0e4bd0dd67c15DECFbBBDBbE07Fc9d51D737693D[0x0000000000000000000000000000000000000000000000000000000000000005]=0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2
set 0xf5a313885832d4fc71d1ef80115197c4479b58c8[0x0000000000000000000000000000000000000000000000000000000000000005]=0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2
set 0x1af00a2590a834d14f4a8a26d1b03ebba8cf7961[0x0000000000000000000000000000000000000000000000000000000000000005]=0x00000000000000000000000051284dc2133e8d3a8e213dca6a6fa768cfdfcce2
4. POST — ownership rewritten to the DAO Safe (all 23 contracts)
PASS: 0x0e4bd0dd67c15DECFbBBDBbE07Fc9d51D737693D owner == Safe
PASS: 0x1af00a2590a834d14f4a8a26d1b03ebba8cf7961 owner == Safe
PASS: 0x1E48D32a4F5e9f08DB9aE4959163300FaF8A6C8e owner == Safe
PASS: 0x26B40f650156C7EbF9e087Dd0dca181Fe87625B7 owner == Safe
PASS: 0x28BfC5DD4B7E15659e41190983e5fE3df1132bB9 owner == Safe
PASS: 0x3078847F879A33994cDa2Ec1540ca52b5E0eE2e5 owner == Safe
PASS: 0x3141b94b89691009b950c96e97Bff48e0C543E3C owner == Safe
PASS: 0x3569c06a80c148d7b4b67f8a06125f6d59774243 owner == Safe
PASS: 0x5E5290f350352768bD2bfC59c2DA15DD04A7cB88 owner == Safe
PASS: 0x60E0a8167FC13dE89348978860466C9ceC24B9ba owner == Safe
PASS: 0x6EdcF3645DeF09DB45050638c41157D8B9FEa1cf owner == Safe
PASS: 0x724f4ef0400386fc8c1011788af733bd367ac00f owner == Safe
PASS: 0x79608e442d046ea6d3125931a33ce971ad99c6f9 owner == Safe
PASS: 0x8031e9b0d02a792cfefaa2bdca6e1289d385426f owner == Safe
PASS: 0x80bBc7C4C7a59C899D1B37BC14539A22D5830a84 owner == Safe
PASS: 0x848Cff46eb323f323b6Bbe1Df274E40793d7f2c2 owner == Safe
PASS: 0x8B982132d639527E8a0eAAD385f97719af8f5e04 owner == Safe
PASS: 0xa85eb8e163f4d70bfc43a4f3fcc9a8dfc42b1ae4 owner == Safe
PASS: 0xaa6a41cacb18bed5b98059a5fa30f9dbabe0cc64 feeToSetter == Safe
PASS: 0xD173926A10A0C4eCd3A51B1422270b65Df0551c1 feeToSetter == Safe
PASS: 0xdf1de693c31e2a5eb869c329529623556b20abf3 owner == Safe
PASS: 0xeac0a50112b5ee20cc18e42ba4d37777012afd0d feeToSetter == Safe
PASS: 0xf5a313885832d4fc71d1ef80115197c4479b58c8 owner == Safe
5. POST — token decimals/supply/symbol preserved (bricking check)
PASS: 0x0e4bd0dd67c15DECFbBBDBbE07Fc9d51D737693D decimals preserved
PASS: 0x0e4bd0dd67c15DECFbBBDBbE07Fc9d51D737693D totalSupply preserved
PASS: 0x0e4bd0dd67c15DECFbBBDBbE07Fc9d51D737693D symbol preserved
PASS: 0x1af00a2590a834d14f4a8a26d1b03ebba8cf7961 decimals preserved
PASS: 0x1af00a2590a834d14f4a8a26d1b03ebba8cf7961 totalSupply preserved
PASS: 0x1af00a2590a834d14f4a8a26d1b03ebba8cf7961 symbol preserved
PASS: 0x1E48D32a4F5e9f08DB9aE4959163300FaF8A6C8e decimals preserved
PASS: 0x1E48D32a4F5e9f08DB9aE4959163300FaF8A6C8e totalSupply preserved
PASS: 0x1E48D32a4F5e9f08DB9aE4959163300FaF8A6C8e symbol preserved
PASS: 0x26B40f650156C7EbF9e087Dd0dca181Fe87625B7 decimals preserved
PASS: 0x26B40f650156C7EbF9e087Dd0dca181Fe87625B7 totalSupply preserved
PASS: 0x26B40f650156C7EbF9e087Dd0dca181Fe87625B7 symbol preserved
PASS: 0x28BfC5DD4B7E15659e41190983e5fE3df1132bB9 decimals preserved
PASS: 0x28BfC5DD4B7E15659e41190983e5fE3df1132bB9 totalSupply preserved
PASS: 0x28BfC5DD4B7E15659e41190983e5fE3df1132bB9 symbol preserved
PASS: 0x3078847F879A33994cDa2Ec1540ca52b5E0eE2e5 decimals preserved
PASS: 0x3078847F879A33994cDa2Ec1540ca52b5E0eE2e5 totalSupply preserved
PASS: 0x3078847F879A33994cDa2Ec1540ca52b5E0eE2e5 symbol preserved
PASS: 0x3141b94b89691009b950c96e97Bff48e0C543E3C decimals preserved
PASS: 0x3141b94b89691009b950c96e97Bff48e0C543E3C totalSupply preserved
PASS: 0x3141b94b89691009b950c96e97Bff48e0C543E3C symbol preserved
PASS: 0x3569c06a80c148d7b4b67f8a06125f6d59774243 decimals preserved
PASS: 0x3569c06a80c148d7b4b67f8a06125f6d59774243 totalSupply preserved
PASS: 0x3569c06a80c148d7b4b67f8a06125f6d59774243 symbol preserved
PASS: 0x5E5290f350352768bD2bfC59c2DA15DD04A7cB88 decimals preserved
PASS: 0x5E5290f350352768bD2bfC59c2DA15DD04A7cB88 totalSupply preserved
PASS: 0x5E5290f350352768bD2bfC59c2DA15DD04A7cB88 symbol preserved
PASS: 0x60E0a8167FC13dE89348978860466C9ceC24B9ba decimals preserved
PASS: 0x60E0a8167FC13dE89348978860466C9ceC24B9ba totalSupply preserved
PASS: 0x60E0a8167FC13dE89348978860466C9ceC24B9ba symbol preserved
PASS: 0x6EdcF3645DeF09DB45050638c41157D8B9FEa1cf decimals preserved
PASS: 0x6EdcF3645DeF09DB45050638c41157D8B9FEa1cf totalSupply preserved
PASS: 0x6EdcF3645DeF09DB45050638c41157D8B9FEa1cf symbol preserved
PASS: 0x724f4ef0400386fc8c1011788af733bd367ac00f decimals preserved
PASS: 0x724f4ef0400386fc8c1011788af733bd367ac00f totalSupply preserved
PASS: 0x724f4ef0400386fc8c1011788af733bd367ac00f symbol preserved
PASS: 0x79608e442d046ea6d3125931a33ce971ad99c6f9 decimals preserved
PASS: 0x79608e442d046ea6d3125931a33ce971ad99c6f9 totalSupply preserved
PASS: 0x79608e442d046ea6d3125931a33ce971ad99c6f9 symbol preserved
PASS: 0x8031e9b0d02a792cfefaa2bdca6e1289d385426f decimals preserved
PASS: 0x8031e9b0d02a792cfefaa2bdca6e1289d385426f totalSupply preserved
PASS: 0x8031e9b0d02a792cfefaa2bdca6e1289d385426f symbol preserved
PASS: 0x848Cff46eb323f323b6Bbe1Df274E40793d7f2c2 decimals preserved
PASS: 0x848Cff46eb323f323b6Bbe1Df274E40793d7f2c2 totalSupply preserved
PASS: 0x848Cff46eb323f323b6Bbe1Df274E40793d7f2c2 symbol preserved
PASS: 0x8B982132d639527E8a0eAAD385f97719af8f5e04 decimals preserved
PASS: 0x8B982132d639527E8a0eAAD385f97719af8f5e04 totalSupply preserved
PASS: 0x8B982132d639527E8a0eAAD385f97719af8f5e04 symbol preserved
PASS: 0xa85eb8e163f4d70bfc43a4f3fcc9a8dfc42b1ae4 decimals preserved
PASS: 0xa85eb8e163f4d70bfc43a4f3fcc9a8dfc42b1ae4 totalSupply preserved
PASS: 0xa85eb8e163f4d70bfc43a4f3fcc9a8dfc42b1ae4 symbol preserved
PASS: 0xdf1de693c31e2a5eb869c329529623556b20abf3 decimals preserved
PASS: 0xdf1de693c31e2a5eb869c329529623556b20abf3 totalSupply preserved
PASS: 0xdf1de693c31e2a5eb869c329529623556b20abf3 symbol preserved
PASS: 0xf5a313885832d4fc71d1ef80115197c4479b58c8 decimals preserved
PASS: 0xf5a313885832d4fc71d1ef80115197c4479b58c8 totalSupply preserved
PASS: 0xf5a313885832d4fc71d1ef80115197c4479b58c8 symbol preserved
6. POST — contracts STILL FUNCTION (control transferred to Safe)
PASS: LUSD.mint by new owner Safe — control transferred + code intact
PASS: V2.setFeeTo by Safe -> feeTo==Safe
7. POST — non-manifest contracts UNTOUCHED + treasury balance preserved
PASS: WLUX/WETH9 (non-manifest) code unchanged
PASS: V2Router (non-manifest) code unchanged
PASS: treasury 0x9011 balance unchanged
================ PASS=109 FAIL=0 ================