foundry_evm_core/
constants.rs

1use alloy_primitives::{Address, B256, address, b256, hex};
2
3/// The cheatcode handler address.
4///
5/// This is the same address as the one used in DappTools's HEVM.
6///
7/// This is calculated as:
8/// `address(bytes20(uint160(uint256(keccak256('hevm cheat code')))))`
9pub const CHEATCODE_ADDRESS: Address = address!("0x7109709ECfa91a80626fF3989D68f67F5b1DD12D");
10
11/// The contract hash at [`CHEATCODE_ADDRESS`].
12///
13/// This is calculated as:
14/// `keccak256(abi.encodePacked(CHEATCODE_ADDRESS))`.
15pub const CHEATCODE_CONTRACT_HASH: B256 =
16    b256!("0xb0450508e5a2349057c3b4c9c84524d62be4bb17e565dbe2df34725a26872291");
17
18/// The Hardhat console address.
19///
20/// See: <https://github.com/NomicFoundation/hardhat/blob/main/v-next/hardhat/console.sol>
21pub const HARDHAT_CONSOLE_ADDRESS: Address = address!("0x000000000000000000636F6e736F6c652e6c6f67");
22
23/// Stores the caller address to be used as *sender* account for:
24/// - deploying Test contracts
25/// - deploying Script contracts
26///
27/// Derived from `address(uint160(uint256(keccak256("foundry default caller"))))`,
28/// which is equal to `0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38`.
29pub const CALLER: Address = address!("0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38");
30
31/// The default test contract address.
32///
33/// Derived from `CALLER.create(1)`.
34pub const TEST_CONTRACT_ADDRESS: Address = address!("0x7FA9385bE102ac3EAc297483Dd6233D62b3e1496");
35
36/// Magic return value returned by the `assume` cheatcode.
37pub const MAGIC_ASSUME: &[u8] = b"FOUNDRY::ASSUME";
38
39/// Magic return value returned by the `skip` cheatcode. Optionally appended with a reason.
40pub const MAGIC_SKIP: &[u8] = b"FOUNDRY::SKIP";
41
42/// The address that deploys the default CREATE2 deployer contract.
43pub const DEFAULT_CREATE2_DEPLOYER_DEPLOYER: Address =
44    address!("0x3fAB184622Dc19b6109349B94811493BF2a45362");
45/// The default CREATE2 deployer.
46pub const DEFAULT_CREATE2_DEPLOYER: Address =
47    address!("0x4e59b44847b379578588920ca78fbf26c0b4956c");
48/// The initcode of the default CREATE2 deployer.
49pub const DEFAULT_CREATE2_DEPLOYER_CODE: &[u8] = &hex!(
50    "604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3"
51);
52/// The runtime code of the default CREATE2 deployer.
53pub const DEFAULT_CREATE2_DEPLOYER_RUNTIME_CODE: &[u8] = &hex!(
54    "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3"
55);
56/// The hash of the default CREATE2 deployer code.
57///
58/// This is calculated as `keccak256([`DEFAULT_CREATE2_DEPLOYER_RUNTIME_CODE`])`.
59pub const DEFAULT_CREATE2_DEPLOYER_CODEHASH: B256 =
60    b256!("0x2fa86add0aed31f33a762c9d88e807c475bd51d0f52bd0955754b2608f7e4989");
61
62#[cfg(test)]
63mod tests {
64    use super::*;
65
66    #[test]
67    fn create2_deployer() {
68        assert_eq!(DEFAULT_CREATE2_DEPLOYER_DEPLOYER.create(0), DEFAULT_CREATE2_DEPLOYER);
69    }
70}