Repository navigation
fix: find exits on any rollup version, not just canonical and deposit-time - #125
Merged
Merged
Conversation
…-time The dashboard looked for an attester's live record on the canonical rollup, the rollup the stake was deposited on, and the indexer's hint. An exit stays locked on the rollup it started on, and slashing into ZOMBIE emits no WithdrawInitiated, so the indexer moves its hint along with every cutover. A stake deposited on one rollup, migrated to a second and slashed there was therefore invisible once canonical moved on: the dashboard showed status NONE and offered no withdraw actions. Now every rollup version from /api/rollups is probed in one multicall. The indexer hint still wins when the chain shows a record there, so stakes that resolved correctly before resolve to the same rollup. On mainnet this unsticks 34 exitable stakes (~6.3M AZTEC): 17 zombies on V4 and 15 zombies plus 2 slash-exits on V5. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The dashboard decides which rollup holds an attester's live record by probing three addresses: the canonical rollup, the rollup the stake was deposited on, and the indexer's
effectiveRolluphint.An exit stays locked on the rollup where it started. Slashing an attester below the ejection threshold (ZOMBIE) emits no
WithdrawInitiated, so at each cutover the indexer moves the hint for these attesters to the new canonical rollup. For a stake deposited on one rollup, auto-migrated to a second and slashed there, none of the three probes finds the exit once canonical moves on. The dashboard shows status NONE and offers no withdraw actions.On mainnet today this affects 34 stakes, all exitable now (~6.3M AZTEC):
0xAe20…4962)0x91fF…8E34)WithdrawInitiated)Fix
useAttesterViewBestEffortnow readsgetAttesterViewfrom every rollup version in/api/rollups(plus the deposit-time rollup and hint, if missing from the list) in one multicall. Selection, inattesterRollupSelection.ts:Keeping the hint first means every stake that resolved correctly before resolves to the same rollup. The hook's signature and return shape are unchanged.
A failed read on any probed rollup is now surfaced as an error, since that rollup could be the one holding the record.
Verification
tsc -band eslint pass.Follow-up (not in this PR)
The comment in
atp-indexer/src/events/registry/canonical-rollup-updated.tssays ZOMBIE registrations migrate with canonical. They don't: the exit stays on the rollup where it was slashed. Left untouched because Ponder fingerprints indexing files, so editing it forces a schema rebuild; best fixed alongside a real indexer change.🤖 Generated with Claude Code