foundry_common/
constants.rs1use alloy_eips::Typed2718;
4use alloy_network::AnyTxEnvelope;
5use alloy_primitives::{Address, B256, Signature, address};
6use std::time::Duration;
7
8pub const DEV_CHAIN_ID: u64 = 31337;
10
11pub const SELECTOR_LEN: usize = 4;
13
14pub const CONTRACT_MAX_SIZE: usize = 24576;
16
17pub const REQUEST_TIMEOUT: Duration = Duration::from_secs(45);
23
24pub const ALCHEMY_FREE_TIER_CUPS: u64 = 330;
26
27pub const NON_ARCHIVE_NODE_WARNING: &str = "\
29It looks like you're trying to fork from an older block with a non-archive node which is not \
30supported. Please try to change your RPC url to an archive node if the issue persists.";
31
32pub const ARBITRUM_SENDER: Address = address!("0x00000000000000000000000000000000000a4b05");
35
36pub const OPTIMISM_SYSTEM_ADDRESS: Address = address!("0xdeaddeaddeaddeaddeaddeaddeaddeaddead0001");
41
42pub const MONAD_SYSTEM_ADDRESS: Address = address!("0x6f49a8F621353f12378d0046E7d7e4b9B249DC9e");
44
45pub const MEGA_SYSTEM_ADDRESS: Address = address!("0xa887dcb9d5f39ef79272801d05abdf707cfbbd1d");
51
52pub const SYSTEM_TRANSACTION_TYPE: u8 = 126;
54
55pub const DEFAULT_USER_AGENT: &str = concat!("foundry/", env!("CARGO_PKG_VERSION"));
57
58pub const TYPE_BINDING_PREFIX: &str = "string constant schema_";
60
61pub fn is_known_system_sender(sender: Address) -> bool {
68 [
69 ARBITRUM_SENDER,
70 OPTIMISM_SYSTEM_ADDRESS,
71 MONAD_SYSTEM_ADDRESS,
72 MEGA_SYSTEM_ADDRESS,
73 Address::ZERO,
74 ]
75 .contains(&sender)
76}
77
78pub fn is_impersonated_tx(tx: &AnyTxEnvelope) -> bool {
79 if let AnyTxEnvelope::Ethereum(tx) = tx {
80 return is_impersonated_sig(tx.signature(), tx.ty());
81 }
82 false
83}
84
85pub fn is_impersonated_sig(sig: &Signature, ty: u8) -> bool {
86 let impersonated_sig =
87 Signature::from_scalars_and_parity(B256::with_last_byte(1), B256::with_last_byte(1), false);
88 if ty != SYSTEM_TRANSACTION_TYPE
89 && (sig == &impersonated_sig || sig.r() == impersonated_sig.r())
90 {
91 return true;
92 }
93 false
94}
95
96#[cfg(test)]
97mod tests {
98 use super::*;
99
100 #[test]
101 fn test_constant_sender() {
102 let arb = address!("0x00000000000000000000000000000000000a4b05");
103 assert_eq!(arb, ARBITRUM_SENDER);
104 let base = address!("0xdeaddeaddeaddeaddeaddeaddeaddeaddead0001");
105 assert_eq!(base, OPTIMISM_SYSTEM_ADDRESS);
106 }
107}