Files
zeekay 0b69203adb fix(testnet,mainnet): drop dead dexConfig precompile + content-hash genesis guard
CRITICAL-2 (brick-on-roll): node v1.30.27/28 removed the 0x9010 DEX
precompile; its config key `dexConfig` is no longer registered, so the
C-Chain upgrade parser rejects it with "unknown precompile config:
dexConfig" -> C-Chain VM init fails -> network brick. Remove the dead
dexConfig activation from both live luxd-startup ConfigMaps and the
testnet-dex chain config. 0x9999 (the live DEX settlement precompile) is
config-free (dated fork), so no key is added. All valid keys kept
(deadZero/dead/deadFull, routerConfig, fhe, ...). Verified against the
v1.30.28 registry (luxfi/precompile v0.5.55): dexConfig was the ONLY
rejected key; cleaned set (17 entries) parses via
extras.UpgradeConfig.UnmarshalJSON.

HIGH-3 (stale-DB crash-loop / fork): the testnet genesis-wipe guard
hashed only a hardcoded base64/gzip-header prefix
("H4sICJJeD2oAA2dlbmVzaXMuanNvbgDU"), not the decoded genesis -> a real
genesis change can leave the prefix-hash unchanged (misfire). Rewrite it
to hash the DECODED genesis content (sha256 of /data/genesis.json),
fail-closed. Mainnet had NO genesis guard at all; add the equivalent,
made production-safe: first guarded boot ADOPTS existing chain state
(never wipes), steady state preserves, and only a verified
recorded-vs-current content mismatch (a deliberate relaunch) triggers a
wipe — and the wipe never deletes the freshly written genesis.json.

Files:
- k8s/lux-mainnet/luxd-startup.yaml: drop dexConfig; add content-hash guard
- k8s/lux-testnet/luxd-startup.yaml: drop dexConfig; guard now hashes decoded genesis
- chain-configs/testnet-dex.json: drop dead dexConfig block (keep routerConfig)

Do NOT reboot testnet/mainnet — gated on the full red re-verify.
2026-07-26 15:46:00 -07:00

43 lines
976 B
JSON

{
"config": {
"chainId": 96368,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"muirGlacierBlock": 0,
"berlinBlock": 0,
"londonBlock": 0,
"arrowGlacierBlock": 0,
"grayGlacierBlock": 0,
"mergeNetsplitBlock": 0,
"shanghaiTime": 0,
"feeConfig": {
"gasLimit": 15000000,
"targetBlockRate": 2,
"minBaseFee": 25000000000,
"targetGas": 60000000,
"baseFeeChangeDenominator": 36,
"minBlockGasCost": 0,
"maxBlockGasCost": 1000000,
"blockGasCostStep": 200000
},
"routerConfig": {
"blockTimestamp": 0
}
},
"alloc": {
"9011E888251AB053B7bD1cdB598Db4f9DEd94714": {
"balance": "0x193e5939a08ce9dbd480000000"
}
},
"timestamp": "0x0",
"gasLimit": "0xe4e1c0",
"difficulty": "0x0",
"baseFeePerGas": "0x5d21dba00"
}