Overview
Note
This is a minor release of op-dispute-mon containing new metrics, bond accounting fixes, and monitoring support for upcoming dispute game types. It is a recommended upgrade for all users.
This release also covers op-dispute-mon/v1.5.3, which was tagged but never published, so the compare link below is against v1.5.2.
Note: super dispute games (interop) are coming in Upgrade 20, and ZK dispute games in a future upgrade. Changes to those code paths in this release are preparation for that functionality and do not affect operators today.
What's Changed
Features
- New
op_dispute_mon_anchor_state_l2_sequence_numbergauge, labelledanchor_state_registry, reporting the L2 sequence number of each monitoredAnchorStateRegistry's current anchor state. Alerting on this against the live L2 head detects a stalling anchor state. Reading the registry address is best-effort — a failure is logged and skipped rather than failing the game (#21209)
Bug fixes
- Fault games in refund distribution mode were queried for the wrong recipients, so refunds owed to original depositors were invisible to credit and collateral accounting. Bonds in refund mode are now attributed to the depositor, which corrects
op_dispute_mon_credits,op_dispute_mon_withdrawal_requests,op_dispute_mon_bond_collateral_required/_availableandop_dispute_mon_honest_actor_pending_withdrawalsfor those games — expect divergence counts and honest-withdrawable amounts to shift after upgrading (#22450) - Monitor shutdown is now idempotent, waits for the in-flight monitoring pass to finish, and is bounded by the shutdown context. Previously stopping the service never stopped the monitor loop, and a second stop panicked (#21862)
Super dispute games (coming in Upgrade 20)
- Added monitoring for simplified
SuperPermissionedDisputeGames: these route through the existing super-root agreement checks, with claim, bond, withdrawal and DelayedWETH monitoring skipped as inapplicable. Invalid super permissioned proposals are still detected even though the contract auto-resolves to defender wins (#21106) - Terminal SuperPermissioned games no longer contribute buckets to
op_dispute_mon_resolution_status, where their zero max clock duration previously produced meaninglesscomplete_max_durationentries (#22225) - Removed support for super-cannon (game type 4), which no longer exists. SuperCannonKona (9) and SuperPermissioned (5) are unaffected (#20555)
ZK dispute games (coming in a future upgrade)
- ZK dispute games (game type 10) are now monitored end to end: the game caller is constructed for type 10 instead of being rejected, ZK games are classified as super-root games so their claims are compared against super roots rather than single-chain output roots, and ZK bond, credit and withdrawal accounting is normalized to match what the contract records. Previously a type-10 game was counted in
op_dispute_mon_failed_gameson every poll (#22229, #22228, #22227, #21979) - On a chain where ZK games can appear,
--superroot-rpcbecomes a hard requirement: without it a type-10 game fails enrichment, is counted inop_dispute_mon_failed_games, and logs an error on every poll (#22229)
Other
- Three new time series are exported unconditionally, at zero, on every scrape — there is no flag to disable them:
op_dispute_mon_games_waiting_for_root_source{game_type="zk"},op_dispute_mon_zk_games_pending_lifecycle_action{action="resolution"}and{action="bond_distribution"}. Dashboards and recording rules that enumerate op-dispute-mon series will pick them up (#22229) - The bond, credit, withdrawal and balance enrichers were consolidated into a single normalized bond snapshot behind a dedicated monitor lane.
op_dispute_mon_honest_actor_bondskeeps its name andhonest_actor_address/statelabels but is now written from that snapshot rather than from raw claims, so it is worth sanity-checking after upgrading (#22226, #22225) --supernode-rpcis renamed to--superroot-rpc, andOP_DISPUTE_MON_SUPERNODE_RPCtoOP_DISPUTE_MON_SUPERROOT_RPC, reflecting that the source may be either an op-node or an op-supernode. The old flag and environment variable names continue to work (#21864)- Superchain registry chain configs are now embedded from the monorepo's own
op-core/superchainbundle instead of op-geth's, and the build fails on bundle drift.--network/OP_DISPUTE_MON_NETWORKis unchanged, but it is worth confirming the network name you pass still resolves (#21487) - Rebuilt on the Go 1.26.6 toolchain, and
golang.org/x/text,golang.org/x/modandklauspost/compressupdated, to pick up CVE fixes in the toolchain and image (#21452, #21854, #22424, #22067, #22425, #22064)
Full Changelog: op-dispute-mon/v1.5.2...op-dispute-mon/v1.6.0
🚢 Docker Image: