Files
zeekayandHanzo Dev cc0993b447 genesis: split the treasury into a DAO Safe and a Z Safe
2T is the max supply, not the genesis allocation. Every network allocated a
flat 2T to the EOA 0x9011E888..., which pre-minted the ~900B the community is
meant to mine and left the whole treasury under one key with no contract
around it.

Genesis now mints 1T to a DAO Safe and 100B to a Z Safe -- 1.1T, with the
remainder left to emission. Both are Safe v1.5.0 (SafeL2) 1-of-1 owned by
0x9011E888..., which itself now holds no premine and is only the signer.

The Safes are predeployed with code and storage rather than left as bare
CREATE2 predictions, so they answer getOwners()/getThreshold() at block 0 and
the address cannot drift with a deployer nonce or a recompile -- the failure
mode that has already stranded several Safe suites in this estate. The CREATE2
deployer, the singleton, the factory and the fallback handler are predeployed
alongside, so proxyCreationCode() on the live factory reproduces both
addresses from keccak("dao.safe.v1") and keccak("z.safe.v1"). The addresses
are chain-independent and identical across Lux, Hanzo and Zoo.

Bytecode is safe-global/safe-smart-account v1.5.0 at a2e19c6a, built with
solc 0.8.31 (optimizer 200, via-IR, cancun) under luxfi/standard's foundry
config. Every non-treasury alloc is preserved byte for byte, and
pkg/genesis.TotalSupply still declares the 2T cap.

Changing the alloc moves the C-Chain state root, so this is a re-genesis on
any network that already has history.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-15 11:40:20 -07:00
..