Skip to content

Configure canonical EVM preinstalls in chainspecs - #5450

Open
mpapierski wants to merge 11 commits into
feat-evmfrom
evm-preinstalls-poc
Open

mpapierski wants to merge 11 commits into
feat-evmfrom
evm-preinstalls-poc

Conversation

@mpapierski

@mpapierski mpapierski commented Oct 2, 2026 •

Copy link
Copy Markdown
Collaborator

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.

Preinstall Canonical address on Ethereum mainnet (Etherscan)
Multicall3 0xcA11bde05977b3631167028862bE2a173976CA11
Arachnid CREATE2 deployer 0x4e59b44847b379578588920cA78FbF26c0B4956C
Safe Singleton Factory 0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7
ERC-2470 Singleton Factory 0xce0042B868300000d44A59004Da54A005ffdcf9f
Permit2 0x000000000022D473030F116dDEE9F6B43aC78BA3
SenderCreator v0.8 0x449ED7C3e6Fee6a97311d4b55475DF59C44AdD33
EntryPoint v0.8 0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108

EntryPoint and SenderCreator v0.8 form a matching pair and activate together.

@mpapierski
mpapierski added this pull request to stack #5447 October 2, 2026 10:35
@mpapierski mpapierski changed the title evm preinstalls poc Preinstall Multicall3 at its canonical address Oct 2, 2026
@mpapierski
mpapierski marked this pull request as ready for review October 2, 2026 10:36
@mpapierski mpapierski changed the title Preinstall Multicall3 at its canonical address Add preinstalls with expected tools at their canonical address Oct 2, 2026
@mpapierski mpapierski changed the title Add preinstalls with expected tools at their canonical address Add preinstalls for canonical utilities Oct 2, 2026
@mpapierski
mpapierski force-pushed the evm-preinstalls-poc branch from f84cbab to f36ddd5 Compare October 6, 2026 15:46
@mpapierski mpapierski changed the title Add preinstalls for canonical utilities Configure canonical EVM preinstalls in chainspecs Oct 6, 2026
@mpapierski
mpapierski force-pushed the evm-preinstalls-poc branch 2 times, most recently from 8a56a4f to 9220b51 Compare October 7, 2026 11:39
@mpapierski
mpapierski force-pushed the evm-preinstalls-poc branch from 9220b51 to 07de5a5 Compare October 7, 2026 14:03
@mpapierski
mpapierski force-pushed the evm-preinstalls-poc branch 2 times, most recently from 19b9b5f to 9fc2694 Compare October 8, 2026 12:21
Base automatically changed from evm-state-consistency to feat-evm October 8, 2026 13:00
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
mpapierski force-pushed the evm-preinstalls-poc branch from 9fc2694 to 56e23fe Compare October 8, 2026 13:00
@mpapierski
mpapierski requested a review from zajko October 8, 2026 13:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant