Skip to content

feat(eip8130): re-pin Keystore contract set to finalized deployment - #4322

Open
chunter-cb wants to merge 1 commit into
mainfrom
feat/eip8130-keystore-addresses
Open

feat(eip8130): re-pin Keystore contract set to finalized deployment#4322
chunter-cb wants to merge 1 commit into
mainfrom
feat/eip8130-keystore-addresses

Conversation

@chunter-cb

Copy link
Copy Markdown
Contributor

Summary

Re-pin the EIP-8130 system-contract set in addresses.rs to the finalized base/eip-8130 deployment (contract renamed AccountConfigurationKeystore).

  • The whole set is now deployed under a single mined, non-zero CREATE2 salt shared across every contract (yielding the Keystore's 0x8130… vanity address). Updates SALT (was B256::ZERO), all seven addresses, and the four changed init-code hashes.
  • P256/WebAuthn/AlwaysValid init-code hashes are unchanged — only their addresses moved with the salt.
  • High-rate-payer proxy code hash updated to match the new implementation.

Verified against the base/eip-8130 Deploy.s.sol broadcast (chain 84532): each address CREATE2-derives from factory + shared salt + init-code hash.

Stacked on #4302 (feat/eip8130-admin-actor-delegation).

Test plan

  • cargo test -p base-common-consensus --lib addresses:: (incl. addresses_match_create2_derivation) passes

Comment on lines +10 to +11
//! contract shares the `0x8130…` vanity prefix (except
//! [`Self::ALWAYS_VALID_AUTHENTICATOR`], a test/keyless helper deployed under the

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Self::ALWAYS_VALID_AUTHENTICATOR won't resolve in a module-level //! doc comment — there's no Self at module scope. This will produce a broken intra-doc link (rustdoc warns / errors depending on lint level). Should be Eip8130Contracts::ALWAYS_VALID_AUTHENTICATOR.

Suggested change
//! contract shares the `0x8130…` vanity prefix (except
//! [`Self::ALWAYS_VALID_AUTHENTICATOR`], a test/keyless helper deployed under the
//! contract shares the `0x8130…` vanity prefix (except
//! [`Eip8130Contracts::ALWAYS_VALID_AUTHENTICATOR`], a test/keyless helper deployed under the

@chunter-cb
chunter-cb force-pushed the feat/eip8130-keystore-addresses branch from 17f704b to 80fafb9 Compare August 10, 2026 21:52
@chunter-cb
chunter-cb changed the base branch from feat/eip8130-admin-actor-delegation to main August 10, 2026 21:52
@cb-heimdall

Copy link
Copy Markdown
Collaborator

🟡 Heimdall Review Status

Requirement Status More Info
Reviews 🟡 0/1
Denominator calculation
Show calculation
1 if user is bot 0
1 if user is external 0
2 if repo is sensitive 0
From .codeflow.yml 1
Additional review requirements
Show calculation
Max 0
0
From CODEOWNERS 0
Global minimum 0
Max 1
1
1 if commit is unverified 0
Sum 1

The reference contracts (base/eip-8130) finalized under a mined, non-zero
CREATE2 salt shared across the whole set (yielding the Keystore's 0x8130…
vanity address). Re-pin every address, the shared salt, and the four changed
init-code hashes; the high-rate-payer proxy code hash is updated to match the
new implementation. P256/WebAuthn/AlwaysValid init-code hashes are unchanged —
only their addresses moved with the salt.

Verified against the base/eip-8130 Deploy.s.sol broadcast (chain 84532): each
address CREATE2-derives from factory + shared salt + init-code hash
(addresses_match_create2_derivation stays green).
@chunter-cb
chunter-cb force-pushed the feat/eip8130-keystore-addresses branch from 80fafb9 to 71b5929 Compare August 10, 2026 23:20
@github-actions

Copy link
Copy Markdown
Contributor

Review Summary

Single-file constant-value update re-pinning the EIP-8130 contract set to the finalized deployment. No issues found.

What changed:

  • Removed shared SALT (was B256::ZERO), replaced with 6 per-contract *_SALT constants mined for the 0x8130… vanity prefix
  • Updated all 6 contract addresses and 4 init-code hashes (P256/WebAuthn init-code hashes unchanged, addresses moved with new salts)
  • Updated CANONICAL_HIGH_RATE_PAYER_PROXY_CODE_HASH (ERC-1167 runtime embeds the implementation address, which changed)
  • Removed ALWAYS_VALID_AUTHENTICATOR and its init-code hash — no remaining references anywhere in the codebase
  • Tests correctly adapted from 2-tuples (address, hash) to 3-tuples (address, salt, hash)

Verified:

  • All 6 new addresses start with 0x8130, consistent with the module doc claim
  • No dangling references to removed ALWAYS_VALID_AUTHENTICATOR or old SALT constant
  • No consumers outside this file reference the removed constants
  • CREATE2 derivation test structure is sound — each triple is checked against factory.create2(salt, init_code_hash)

No correctness, safety, or API design concerns.

@github-actions

Copy link
Copy Markdown
Contributor

Base Std historical fork tests

Fork Result Passed Failed Skipped base/base base-anvil base-std
Beryl pass 616 0 13 a10b0bb2 6d744e03 4658f1b7
Cobalt pass 718 0 14 a10b0bb2 ae7557c4 38567e20

View run

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.

2 participants