Summary
Dispatch utility.batchAll (call hash 0x378378e79494d3eadbef8a9e651c6a7753ca5b7bd1fbbbadb80c5c4ec977a196)
to move consensusClient on all 9 EVM hosts from the current ConsensusRouter
0xfb9D64c710298DF88B959d3248a8C3eE69f71f05 to the newly deployed
0x8FEe4eeEB9dD15247A2b8D0aC05fCaEcad710280.
pallet_ismp_host_executive requires Root, so this needs to reach Root origin
(whitelist + fast-track). The batch contains 9 × hostExecutive.update_host_params,
one per chain: Ethereum, Arbitrum, Optimism, Base, BSC, Gnosis, Soneium, Polygon,
Polkadot Hub.
Why
This activates a hardening fix to consensus proof validation in the SP1 BEEFY client.
It is a security fix and should be treated as time-sensitive. A full write-up will be
published once the upgrade is live on all chains.
What changes
Address
New SP1Beefy 0x3683CD18CDb7C5C223F9489Ac33c9c97EB176cB1
New ConsensusRouter 0x8FEe4eeEB9dD15247A2b8D0aC05fCaEcad710280
EcdsaBeefy (reused, unchanged) 0xBb5dbAA19b20DD5A2CE523c9437781F9236DF2B0
SP1Verifier (reused, unchanged) 0x70303aA3434e13B64F150CE72bad43e13c8eD186
Only the SP1 BEEFY client changed. The ECDSA client and the Groth16 verifier are the
existing deployments, reused at their current addresses.
The SP1 verification key is unchanged (0x007d1720…): the change is enforced on-chain,
not in-circuit, so no re-proving is required and relayers need no changes. Both new
contracts are deployed and source-verified at identical addresses on all 9 chains.
Compatibility
No legitimate consensus proof is affected. The change was validated against the most
recent mainnet submissions across successive validator-set rotations, and a mainnet fork
test replays a real proof — including an authority-set rotation — through the new client
unchanged.
Scope
batchAll is atomic: either all 9 hosts move or none do. update_host_params re-encodes
the full param struct from the values stored on Nexus, so drift would rewrite other fields;
all ten fields were diffed against the live hostParams() on all 9 chains and are in sync,
so this changes consensusClient only.
How to verify before voting
cast call 0x8FEe4eeEB9dD15247A2b8D0aC05fCaEcad710280 "sp1Beefy()(address)"
→ 0x3683CD18…, and "ecdsaBeefy()(address)" → 0xBb5dbAA1… (existing client, reused).
cast call 0x3683CD18CDb7C5C223F9489Ac33c9c97EB176cB1 "verificationKey()(bytes32)"
→ 0x007d1720c695842ed647a1a72e981751f9b5e26fc5ca038523b23430a1292f08 (unchanged).
Decode the batch and confirm each inner call sets consensusClient and nothing else.
Call data
0x040224350100010000000000000000000000018fee4eeeb9dd15247a2b8d0ac05fcaecad7102800000350100b1a400000000000000000000018fee4eeeb9dd15247a2b8d0ac05fcaecad71028000003501000a0000000000000000000000018fee4eeeb9dd15247a2b8d0ac05fcaecad7102800000350100052100000000000000000000018fee4eeeb9dd15247a2b8d0ac05fcaecad7102800000350100380000000000000000000000018fee4eeeb9dd15247a2b8d0ac05fcaecad7102800000350100640000000000000000000000018fee4eeeb9dd15247a2b8d0ac05fcaecad71028000003501004c0700000000000000000000018fee4eeeb9dd15247a2b8d0ac05fcaecad7102800000350100890000000000000000000000018fee4eeeb9dd15247a2b8d0ac05fcaecad7102800000350100431b0f190000000000000000018fee4eeeb9dd15247a2b8d0ac05fcaecad7102800000
Threshold
Threshold