foundry_evm_core/constants.rs
1use alloy_primitives::{address, b256, hex, Address, B256};
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/nomiclabs/hardhat/blob/master/packages/hardhat-core/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.
32pub const TEST_CONTRACT_ADDRESS: Address = address!("0xb4c79daB8f259C7Aee6E5b2Aa729821864227e84");
33
34/// Magic return value returned by the `assume` cheatcode.
35pub const MAGIC_ASSUME: &[u8] = b"FOUNDRY::ASSUME";
36
37/// Magic return value returned by the `skip` cheatcode. Optionally appended with a reason.
38pub const MAGIC_SKIP: &[u8] = b"FOUNDRY::SKIP";
39
40/// Test timeout return value.
41pub const TEST_TIMEOUT: &str = "FOUNDRY::TEST_TIMEOUT";
42
43/// The address that deploys the default CREATE2 deployer contract.
44pub const DEFAULT_CREATE2_DEPLOYER_DEPLOYER: Address =
45 address!("0x3fAB184622Dc19b6109349B94811493BF2a45362");
46/// The default CREATE2 deployer.
47pub const DEFAULT_CREATE2_DEPLOYER: Address =
48 address!("0x4e59b44847b379578588920ca78fbf26c0b4956c");
49/// The initcode of the default CREATE2 deployer.
50pub const DEFAULT_CREATE2_DEPLOYER_CODE: &[u8] = &hex!("604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3");
51/// The runtime code of the default CREATE2 deployer.
52pub const DEFAULT_CREATE2_DEPLOYER_RUNTIME_CODE: &[u8] = &hex!("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3");
53/// The hash of the default CREATE2 deployer code.
54///
55/// This is calculated as `keccak256([`DEFAULT_CREATE2_DEPLOYER_RUNTIME_CODE`])`.
56pub const DEFAULT_CREATE2_DEPLOYER_CODEHASH: B256 =
57 b256!("0x2fa86add0aed31f33a762c9d88e807c475bd51d0f52bd0955754b2608f7e4989");
58
59#[cfg(test)]
60mod tests {
61 use super::*;
62
63 #[test]
64 fn create2_deployer() {
65 assert_eq!(DEFAULT_CREATE2_DEPLOYER_DEPLOYER.create(0), DEFAULT_CREATE2_DEPLOYER);
66 }
67}