superchain_primitives/
predeploys.rs

1//! Contains all [predeploy contract addresses][predeploys].
2//!
3//! Predeploys are smart contracts on the OP Stack that exist at predetermined addresses
4//! at the genesis state. They are similar to precompiles but run directly in the EVM
5//! instead of running native code outside of the EVM.
6//!
7//! Predeploys are used instead of precompiles to make it easier for multiclient
8//! implementations and allow for more integration with hardhat/foundry network forking.
9//!
10//! Predeploy addresses exist in the 1-byte namespace `0x42000000000000000000000000000000000000xx`.
11//! Proxies are set at each possible predeploy address except for the GovernanceToken and the ProxyAdmin.
12//!
13//! [predeploys]: https://specs.optimism.io/protocol/predeploys.html
14
15use alloy_primitives::{address, Address};
16
17/// Legacy Message Passer Predeploy.
18#[deprecated]
19pub const LEGACY_MESSAGE_PASSER: Address = address!("4200000000000000000000000000000000000000");
20
21/// Deployer Whitelist Predeploy.
22#[deprecated]
23pub const DEPLOYER_WHITELIST: Address = address!("4200000000000000000000000000000000000002");
24
25/// Legacy ERC20ETH Predeploy.
26#[deprecated]
27pub const LEGACY_ERC20_ETH: Address = address!("DeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000");
28
29/// WETH9 Predeploy.
30pub const WETH9: Address = address!("4200000000000000000000000000000000000006");
31
32/// L2 Cross Domain Messenger Predeploy.
33pub const L2_CROSS_DOMAIN_MESSENGER: Address = address!("4200000000000000000000000000000000000007");
34
35/// L2 Standard Bridge Predeploy.
36pub const L2_STANDARD_BRIDGE: Address = address!("4200000000000000000000000000000000000010");
37
38/// Sequencer Fee Vault Predeploy.
39pub const SEQUENCER_FEE_VAULT: Address = address!("4200000000000000000000000000000000000011");
40
41/// Optimism Mintable ERC20 Factory Predeploy.
42pub const OPTIMISM_MINTABLE_ERC20_FACTORY: Address =
43    address!("4200000000000000000000000000000000000012");
44
45/// L1 Block Number Predeploy.
46pub const L1_BLOCK_NUMBER: Address = address!("4200000000000000000000000000000000000013");
47
48/// Gas Price Oracle Predeploy.
49pub const GAS_PRICE_ORACLE: Address = address!("420000000000000000000000000000000000000F");
50
51/// Governance Token Predeploy.
52pub const GOVERNANCE_TOKEN: Address = address!("4200000000000000000000000000000000000042");
53
54/// L1 Block Predeploy.
55pub const L1_BLOCK: Address = address!("4200000000000000000000000000000000000015");
56
57/// L2 To L1 Message Passer Predeploy.
58pub const L2_TO_L1_MESSAGE_PASSER: Address = address!("4200000000000000000000000000000000000016");
59
60/// L2 ERC721 Bridge Predeploy.
61pub const L2_ERC721_BRIDGE: Address = address!("4200000000000000000000000000000000000014");
62
63/// Optimism Mintable ERC721 Factory Predeploy.
64pub const OPTIMISM_MINTABLE_ERC721_FACTORY: Address =
65    address!("4200000000000000000000000000000000000017");
66
67/// Proxy Admin Predeploy.
68pub const PROXY_ADMIN: Address = address!("4200000000000000000000000000000000000018");
69
70/// Base Fee Vault Predeploy.
71pub const BASE_FEE_VAULT: Address = address!("4200000000000000000000000000000000000019");
72
73/// L1 Fee Vault Predeploy.
74pub const L1_FEE_VAULT: Address = address!("420000000000000000000000000000000000001a");
75
76/// Schema Registry Predeploy.
77pub const SCHEMA_REGISTRY: Address = address!("4200000000000000000000000000000000000020");
78
79/// EAS Predeploy.
80pub const EAS: Address = address!("4200000000000000000000000000000000000021");
81
82/// Beacon Block Root Predeploy.
83pub const BEACON_BLOCK_ROOT: Address = address!("000F3df6D732807Ef1319fB7B8bB8522d0Beac02");