core: install Arbitrum precompile dispatch through a resolver hook#653
Closed
joshuacolvin0 wants to merge 1 commit into
Closed
core: install Arbitrum precompile dispatch through a resolver hook#653joshuacolvin0 wants to merge 1 commit into
joshuacolvin0 wants to merge 1 commit into
Conversation
Remove the hardcoded IsDia/IsStylus/IsArbitrum dispatch from activePrecompiledContracts / ActivePrecompiles and replace it with a resolver hook installed at init by downstream Arbitrum integrations (Nitro's gethhook). ArbOS activation-version semantics now live outside core/vm, keeping the delta vs upstream ethereum/go-ethereum minimal and rebases cheap. arbOSActivePrecompiles returns ok=true even when the resolver yields nil views so a pre-activation Arbitrum block cannot fall through to the Ethereum switch: the upstream switch would warm precompile addresses that the canonical chain treats as cold accounts, diverging on state root during replay. SetArbOSPrecompileResolver panics on a nil argument and on a second install so misconfiguration is loud at init time (pre-block-execution), never during dispatch. Tests cover the four dispatch branches — non-Arbitrum passthrough, no-resolver passthrough, resolver invocation with ArbOSVersion forwarding through both entry points, and the load-bearing nil-views-do-not-fall-through invariant — plus the two setter panic paths. Co-Authored-By: Claude Opus 4.6 (1M context) <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.
pulled in by OffchainLabs/nitro#4640
Remove the hardcoded IsDia/IsStylus/IsArbitrum dispatch from
activePrecompiledContracts / ActivePrecompiles and replace it with
a resolver hook installed at init by downstream Arbitrum integrations
(Nitro's gethhook). ArbOS activation-version semantics now live
outside core/vm, keeping the delta vs upstream ethereum/go-ethereum
minimal and rebases cheap.
arbOSActivePrecompiles returns ok=true even when the resolver yields
nil views so a pre-activation Arbitrum block cannot fall through to
the Ethereum switch: the upstream switch would warm precompile
addresses that the canonical chain treats as cold accounts, diverging
on state root during replay.
SetArbOSPrecompileResolver panics on a nil argument and on a second
install so misconfiguration is loud at init time (pre-block-execution),
never during dispatch.
Tests cover the four dispatch branches — non-Arbitrum passthrough,
no-resolver passthrough, resolver invocation with ArbOSVersion
forwarding through both entry points, and the load-bearing
nil-views-do-not-fall-through invariant — plus the two setter panic
paths.
Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com