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.
43 lines
976 B
JSON
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"
|
|
}
|