[Whitelisted Caller] dispatch the whitelisted runtime-upgrade + configuration batch

Summary

If approved, this referendum dispatches — under Root origin — the 22-call batch whose hash is 0x92406cbd37fab40bb8cfa8c04448defdc6f0be6e859ff1006685fdf74347b2b2 and which has been previously whitelisted by the Technical Collective (see Stage 1).

The batch authorizes the next nexus runtime upgrade, points every EVM host at the new ConsensusClient contract, installs Base's dispute-game-factory configuration on the IsmpOptimism client, sets the BEEFY uncle-reward curve, configures per-destination outbound consensus-delivery rewards, and schedules a rotation of the SP1 verifying key for ~500 blocks after enactment.

A full breakdown of every inner call is in the Stage 1 motion thread.

What the public is voting on

A single Root-origin dispatch of utility.batchAll(...) containing exactly the 22 inner calls listed in Stage 1. The Whitelist pallet enforces three witness checks at dispatch time, so voters can be confident there is no room for substitution:

  • call_hash must equal the hash whitelisted by the Tech Collective (0x9240…b2b2).
  • call_encoded_len must equal 818 bytes.
  • The decoded call's declared weight must be ≤ (ref_time = 2_831_825_383, proof_size = 46_671).

Any mismatch — a single byte difference in the noted preimage, a different length, or a higher declared weight — causes dispatch_whitelisted_call to fail and the upgrade does not occur.

Per-chain effects (cheat sheet)

  • Ethereum, Base, Arbitrum, Optimism, Gnosis, BNB, Polygon, Soneium, Polkadot Hub: ConsensusClient address on the EVM host rotates to 0x446f3de1Aff18c2494ab4B27b921f657A468Ab30. Issued via host-manager ISMP messages.
  • Base (additional): IsmpOptimism client gets a fresh dispute-game-factory + three game-type configs (CANNON, PERMISSIONED, AggregateVerifier).
  • Hyperbridge / nexus: runtime upgrade authorized; reward curve updated; outbound consensus-delivery reward set to 50 BRIDGE for Ethereum and 20 BRIDGE for every other EVM destination; SP1 verifying-key rotation scheduled for ~500 blocks (≈50 minutes at 6 s blocks) after enactment.

Risk assessment

  • Runtime upgrade: standard authorize_upgrade flow — the new code only becomes active once apply_authorized_upgrade is submitted in a later block. There is still a window for the Tech Collective to cancel via remove_whitelisted_call if a defect is discovered between enactment and apply.
  • Per-EVM-host updates: update_host_params dispatches one ISMP Post per chain. If a destination chain's host manager is unresponsive at the time, the corresponding update can be retried independently via a follow-up call — the on-chain state on nexus is updated regardless.
  • IsmpOptimism factory rewrite: set_dispute_game_factories overwrites the previous Base factory + configs in storage. Once enacted, only the three new game types listed above will be accepted as fault-proof attestations for Base.
  • Reward changes: the outbound consensus-delivery reward affects the BRIDGE outflow per delivery. With the new schedule, the maximum exposure per Ethereum delivery is 50 BRIDGE and 20 BRIDGE per other-chain delivery.
  • Scheduled SP1 vkey rotation: the scheduler call runs as Root after 500 blocks. Verifiers using the previous vkey will need to upgrade before that block height or they will start producing rejected proofs.

Artifacts

Track whitelisted_caller (id 1)
Decision deposit 400 000 BRIDGE (refundable)
Decision period 2 days
Confirm period 2 hours
Min. enactment 6 minutes
Inner call hash 0x92406cbd37fab40bb8cfa8c04448defdc6f0be6e859ff1006685fdf74347b2b2
Inner call length 818 bytes
Weight witness (incl. 10 % buffer) (ref_time = 2_831_825_383, proof_size = 46_671)
Preimage status Available on-chain (Stage 0)

Submission call

Referenda.submit(
    proposal_origin  = OriginCaller::Origins(Origin::WhitelistedCaller),
    proposal         = Bounded::Inline(
        Whitelist.dispatch_whitelisted_call(
            call_hash           = 0x92406cbd37fab40bb8cfa8c04448defdc6f0be6e859ff1006685fdf74347b2b2,
            call_encoded_len    = 818,
            call_weight_witness = Weight { ref_time: 2_831_825_383, proof_size: 46_671 },
        ),
    ),
    enactment_moment = DispatchTime::After(0),
)

encoded calldata (58 bytes):
0x5200510001bc530292406cbd37fab40bb8cfa8c04448defdc6f0be6e859ff1006685fdf74347b2b23203000003e739caa83ed902000100000000

How to verify before voting

  1. Pull the 818-byte preimage from Preimage::preimage_for((hash, len)) for (0x9240…b2b2, 818).
  2. keccak256 it and confirm it equals 0x92406cbd37fab40bb8cfa8c04448defdc6f0be6e859ff1006685fdf74347b2b2.
  3. Decode it in Polkadot.js → Developer → Extrinsics → Decode against the nexus chain and confirm the 22 inner calls match the breakdown above.
  4. Confirm the call hash matches the entry in Whitelist::WhitelistedCall (Stage 1 must already have closed).
Edited
Reply
Up
Share
Status
Decision1d
Confirmation
1hr
Attempts
1
Tally
100%Aye
50.0%Threshold
0%Nay
Aye
200MBRIDGE
Nay
0BRIDGE
  • 5.00%
  • 0.0%

    Threshold

  • 0.0%
Support
33.1%
200MBRIDGE
Issuance
604.99MBRIDGE
Votes
Nested
Flattened
Actions
Check how referenda works here.
Call
Metadata
Timeline6
Votes Bubble
Curves
Statistics
Comments

Status
Decision1d
Confirmation
1hr
Attempts
1
Tally
100%Aye
50.0%Threshold
0%Nay
Aye
200MBRIDGE
Nay
0BRIDGE
  • 5.00%
  • 0.0%

    Threshold

  • 0.0%
Support
33.1%
200MBRIDGE
Issuance
604.99MBRIDGE
Votes
Nested
Flattened
Actions
Check how referenda works here.