Repository navigation
Configure canonical EVM preinstalls in chainspecs - #5450
Open
mpapierski wants to merge 11 commits into
Open
mpapierski wants to merge 11 commits into
mpapierski wants to merge 11 commits into
Conversation
mpapierski
added this pull request to stack #5447
October 2, 2026 10:35
mpapierski
marked this pull request as ready for review
October 2, 2026 10:36
mpapierski
force-pushed
the
evm-preinstalls-poc
branch
from
October 6, 2026 15:46
f84cbab to
f36ddd5
Compare
mpapierski
force-pushed
the
evm-preinstalls-poc
branch
2 times, most recently
from
October 7, 2026 11:39
8a56a4f to
9220b51
Compare
mpapierski
force-pushed
the
evm-preinstalls-poc
branch
from
October 7, 2026 14:03
9220b51 to
07de5a5
Compare
mpapierski
force-pushed
the
evm-preinstalls-poc
branch
2 times, most recently
from
October 8, 2026 12:21
19b9b5f to
9fc2694
Compare
Pin Multicall3 runtime bytecode at its standard EVM address and embed it with include_bytes! so activation can provide the contract without a presigned deployment transaction. Record the upstream revision, runtime hash, and MIT license. Pin the address and bytecode hash in a unit test.
Make Multicall3 available at its canonical address when EVM support is enabled by a protocol upgrade, after the Prague predeploys are upserted. Share code validation between predeploys and preinstalls. Preserve balances, nonce, identity, and storage; repair missing code records and reject conflicting runtime code. Cover upgrade activation, repeatability, code repair, conflicts, and Multicall3 execution in targeted tests.
Provide the same utility contract addresses on newly created EVM chains as on chains that enable EVM through a protocol upgrade. Run preinstall upserts after predeploys in both genesis storage formats. Verify execution from the genesis state and unchanged code after an upgrade; skip installation while EVM is disabled.
Describe genesis and protocol upgrade activation, idempotence, and code conflict handling in EVM.md and the bytecode documentation. List each supported preinstall with its canonical address and an Ethereum mainnet Etherscan link for comparing interfaces and results.
Make Foundry's default deterministic factory available without its presigned bootstrap transaction at the devnet's configured gas price. Pin the published runtime and provenance, document the registry entry and EVM interface, and cover deployment and collision behavior. Extend genesis, upgrade, and preservation tests to validate the whole registry.
Provide Safe's deterministic deployment address without a separate chain-specific bootstrap transaction. Retain the canonical runtime, license, and pinned deployment provenance. Document the registry entry and EVM interface, and verify CREATE2 address derivation, deployed code execution, and collision behavior.
Provide the standard ABI-based CREATE2 factory at its canonical address without requiring its fixed-price, presigned deployment transaction. Pin the specification's runtime and license, document the registry and EVM interface, and test deterministic deployment and zero-address returns on collisions.
Make Uniswap's shared allowance and signature-transfer contract available at the address expected by application integrations. Pin the deployed mainnet runtime with its constructor immutables and license. Document domain selection across chains, and verify cached and recomputed domains plus signed allowance and replay behavior.
Provide the helper created by the canonical EntryPoint deployment, retaining its immutable authorization of that EntryPoint address. Pin the deployed runtime, release provenance, and license. Document the registry entry and paired activation requirement, and verify its EntryPoint getter and rejection of unauthorized account creation.
Activate ERC-4337's EntryPoint alongside its matching SenderCreator so both canonical addresses are available at genesis and protocol upgrades. Use the deployed runtime with constructor immutables already linked, retaining release provenance and license notices. Document the versioned pair and verify sender creation, chain domains, empty bundles, and preservation of existing state across all preinstall addresses.
Load runtime bytecode from [evm.preinstalls] at genesis and protocol upgrades. Include the map in chainspec hashing and retain idempotent upserts so future releases can extend the list without node code changes. Remove embedded binaries and separate licence files. Keep attribution in the chainspec. Document the initial rollout list and the expectation that the first EVM activation upgrade supplies a non-empty table.
mpapierski
force-pushed
the
evm-preinstalls-poc
branch
from
October 8, 2026 13:00
9fc2694 to
56e23fe
Compare
mpapierski
requested review from
EdHastingsCasperAssociation and
darthsiroftardis
October 8, 2026 13:00
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.
This lets chainspecs install canonical EVM utilities at genesis and protocol upgrades, so developer tools can use their standard addresses without presigned deployment transactions. The local chainspec includes the seven preinstalls below with runtime bytecode and attribution, and the first EVM rollout should provide a non-empty preinstall table. Later releases can extend the list through the chainspec, while repeated upgrades preserve existing account state and reject conflicting code.
EntryPoint and SenderCreator v0.8 form a matching pair and activate together.