Skip to content

Commit 424e915

Browse files
committed
test: add unit tests across all morph-reth crates
Add #[cfg(test)] modules to every crate with comprehensive coverage: - chainspec: constants, hardfork ordering, chain spec construction - primitives: header, receipt envelope, transaction encoding/decoding - revm: error types, EVM config, L1 block fee calculation, precompiles, token fee logic, transaction environment - evm: block assembler, receipt builder, EVM config hardfork mapping - consensus: header validation, L1 message sequencing, timestamp rules - txpool: error types, MorphTx validation, transaction type handling - payload-builder: execution info, builder configuration - payload-types: attributes, executable/safe L2 data, params - engine-api: builder state tracker, error types, validator - rpc: error types, receipt/transaction serialization, request types - node: CLI args, engine validator Minor accompanying refactors: - Remove unused From<MorphConsensusError> for ConsensusError impl - Remove unused morph-evm dev-dependency from revm crate - Rename query_erc20_balance to query_balance_via_system_call - Clean up EIP-4788 trace override imports
1 parent b2275d4 commit 424e915

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+4759
-137
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/chainspec/src/constants.rs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,54 @@ pub const L2_MESSAGE_QUEUE_ADDRESS: Address = address!("530000000000000000000000
4949
///
5050
/// This is slot 33, which stores the Merkle root for L2->L1 messages.
5151
pub const L2_MESSAGE_QUEUE_WITHDRAW_TRIE_ROOT_SLOT: U256 = U256::from_limbs([33, 0, 0, 0]);
52+
53+
#[cfg(test)]
54+
mod tests {
55+
use super::*;
56+
57+
#[test]
58+
fn test_chain_ids_are_distinct() {
59+
assert_ne!(MORPH_MAINNET_CHAIN_ID, MORPH_HOODI_CHAIN_ID);
60+
}
61+
62+
#[test]
63+
fn test_chain_id_values() {
64+
assert_eq!(MORPH_MAINNET_CHAIN_ID, 2818);
65+
assert_eq!(MORPH_HOODI_CHAIN_ID, 2910);
66+
}
67+
68+
#[test]
69+
fn test_genesis_hashes_are_distinct() {
70+
assert_ne!(MORPH_MAINNET_GENESIS_HASH, MORPH_HOODI_GENESIS_HASH);
71+
assert_ne!(
72+
MORPH_MAINNET_GENESIS_STATE_ROOT,
73+
MORPH_HOODI_GENESIS_STATE_ROOT
74+
);
75+
}
76+
77+
#[test]
78+
fn test_genesis_hashes_are_nonzero() {
79+
assert_ne!(MORPH_MAINNET_GENESIS_HASH, B256::ZERO);
80+
assert_ne!(MORPH_HOODI_GENESIS_HASH, B256::ZERO);
81+
assert_ne!(MORPH_MAINNET_GENESIS_STATE_ROOT, B256::ZERO);
82+
assert_ne!(MORPH_HOODI_GENESIS_STATE_ROOT, B256::ZERO);
83+
}
84+
85+
#[test]
86+
fn test_l2_message_queue_address() {
87+
assert_eq!(
88+
L2_MESSAGE_QUEUE_ADDRESS,
89+
address!("5300000000000000000000000000000000000001")
90+
);
91+
}
92+
93+
#[test]
94+
fn test_withdraw_trie_root_slot() {
95+
assert_eq!(L2_MESSAGE_QUEUE_WITHDRAW_TRIE_ROOT_SLOT, U256::from(33));
96+
}
97+
98+
#[test]
99+
fn test_base_fee() {
100+
assert_eq!(MORPH_BASE_FEE, 1_000_000);
101+
}
102+
}

crates/chainspec/src/hardfork.rs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,4 +297,54 @@ mod tests {
297297
assert_eq!(MorphHardfork::from(SpecId::PRAGUE), MorphHardfork::Viridian);
298298
assert_eq!(MorphHardfork::from(SpecId::OSAKA), MorphHardfork::Jade);
299299
}
300+
301+
#[test]
302+
fn test_is_bernoulli() {
303+
assert!(MorphHardfork::Bernoulli.is_bernoulli());
304+
assert!(MorphHardfork::Curie.is_bernoulli());
305+
assert!(MorphHardfork::Morph203.is_bernoulli());
306+
assert!(MorphHardfork::Viridian.is_bernoulli());
307+
assert!(MorphHardfork::Emerald.is_bernoulli());
308+
assert!(MorphHardfork::Jade.is_bernoulli());
309+
}
310+
311+
/// SpecIds below CANCUN should map to Morph203 (the latest CANCUN-level hardfork).
312+
#[test]
313+
fn test_specid_below_cancun_maps_to_morph203() {
314+
assert_eq!(
315+
MorphHardfork::from(SpecId::SHANGHAI),
316+
MorphHardfork::Morph203
317+
);
318+
assert_eq!(
319+
MorphHardfork::from(SpecId::HOMESTEAD),
320+
MorphHardfork::Morph203
321+
);
322+
}
323+
324+
/// Verify bidirectional mapping consistency: Hardfork -> SpecId -> Hardfork
325+
/// always returns the latest hardfork sharing that SpecId.
326+
#[test]
327+
fn test_specid_roundtrip_returns_latest_for_spec() {
328+
// Bernoulli -> CANCUN -> Morph203 (latest CANCUN hardfork)
329+
let spec = SpecId::from(MorphHardfork::Bernoulli);
330+
assert_eq!(MorphHardfork::from(spec), MorphHardfork::Morph203);
331+
332+
// Emerald -> OSAKA -> Jade (latest OSAKA hardfork)
333+
let spec = SpecId::from(MorphHardfork::Emerald);
334+
assert_eq!(MorphHardfork::from(spec), MorphHardfork::Jade);
335+
}
336+
337+
#[test]
338+
fn test_default_hardfork_is_jade() {
339+
assert_eq!(MorphHardfork::default(), MorphHardfork::Jade);
340+
}
341+
342+
#[test]
343+
fn test_hardfork_ordering() {
344+
assert!(MorphHardfork::Bernoulli < MorphHardfork::Curie);
345+
assert!(MorphHardfork::Curie < MorphHardfork::Morph203);
346+
assert!(MorphHardfork::Morph203 < MorphHardfork::Viridian);
347+
assert!(MorphHardfork::Viridian < MorphHardfork::Emerald);
348+
assert!(MorphHardfork::Emerald < MorphHardfork::Jade);
349+
}
300350
}

crates/chainspec/src/spec.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,10 @@ fn build_hardforks(genesis: &Genesis, chain_info: &MorphGenesisInfo) -> ChainHar
131131
/// Chains supported by Morph. First value should be used as the default.
132132
pub const SUPPORTED_CHAINS: &[&str] = &["mainnet", "hoodi"];
133133

134+
// =============================================================================
135+
// Chain Specification Parser (CLI)
136+
// =============================================================================
137+
134138
/// Morph chain specification parser.
135139
#[derive(Debug, Clone, Default)]
136140
pub struct MorphChainSpecParser;

crates/consensus/src/error.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,3 @@ impl From<alloy_rlp::Error> for MorphConsensusError {
7171
Self::TransactionDecodeError(err.to_string())
7272
}
7373
}
74-
75-
impl From<MorphConsensusError> for reth_consensus::ConsensusError {
76-
fn from(e: MorphConsensusError) -> Self {
77-
Self::Other(e.to_string())
78-
}
79-
}

0 commit comments

Comments
 (0)