Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
226 changes: 224 additions & 2 deletions crates/primitives/src/proofs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,8 @@ mod tests {
use crate::{
hex_literal::hex,
proofs::{calculate_receipt_root, calculate_transaction_root, genesis_state_root},
Address, Block, Bloom, GenesisAccount, Log, Receipt, ReceiptWithBloom, TxType, H160, H256,
U256,
Address, Block, Bloom, Bytes, GenesisAccount, Log, Receipt, ReceiptWithBloom, TxType, H160,
H256, U256,
};
use reth_rlp::Decodable;

Expand All @@ -161,6 +161,228 @@ mod tests {
assert_eq!(block.transactions_root, tx_root, "Must be the same");
}

#[test]
#[cfg(feature = "optimism")]
fn check_optimism_receipt_root() {
let receipts = vec![
// 0xb0d6ee650637911394396d81172bd1c637d568ed1fbddab0daddfca399c58b53
ReceiptWithBloom {
receipt: Receipt {
tx_type: TxType::DEPOSIT,
success: true,
cumulative_gas_used: 46913,
logs: vec![],
#[cfg(feature = "optimism")]
deposit_nonce: Some(4012991u64),
},
bloom: Bloom(hex!("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")),
},
// 0x2f433586bae30573c393adfa02bc81d2a1888a3d6c9869f473fb57245166bd9a
ReceiptWithBloom {
receipt: Receipt {
tx_type: TxType::EIP1559,
success: true,
cumulative_gas_used: 118083,
logs: vec![
Log {
address: hex!("ddb6dcce6b794415145eb5caa6cd335aeda9c272").into(),
topics: vec![
H256::from_str("c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62").unwrap(),
H256::from_str("000000000000000000000000c498902843af527e674846bb7edefa8ad62b8fb9").unwrap(),
H256::from_str("000000000000000000000000c498902843af527e674846bb7edefa8ad62b8fb9").unwrap(),
H256::from_str("0000000000000000000000000000000000000000000000000000000000000000").unwrap(),
],
data: Bytes::from_str("00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001").unwrap(),
},
Log {
address: hex!("ddb6dcce6b794415145eb5caa6cd335aeda9c272").into(),
topics: vec![
H256::from_str("c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62").unwrap(),
H256::from_str("000000000000000000000000c498902843af527e674846bb7edefa8ad62b8fb9").unwrap(),
H256::from_str("0000000000000000000000000000000000000000000000000000000000000000").unwrap(),
H256::from_str("000000000000000000000000c498902843af527e674846bb7edefa8ad62b8fb9").unwrap(),
],
data: Bytes::from_str("00000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001").unwrap(),
},
Log {
address: hex!("ddb6dcce6b794415145eb5caa6cd335aeda9c272").into(),
topics: vec![
H256::from_str("0eb774bb9698a73583fe07b6972cf2dcc08d1d97581a22861f45feb86b395820").unwrap(),
H256::from_str("000000000000000000000000c498902843af527e674846bb7edefa8ad62b8fb9").unwrap(),
H256::from_str("000000000000000000000000c498902843af527e674846bb7edefa8ad62b8fb9").unwrap(),
],
data: Bytes::from_str("0000000000000000000000000000000000000000000000000000000000000003").unwrap(),
},
],
#[cfg(feature = "optimism")]
deposit_nonce: None,
},
bloom: Bloom(hex!("00001000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000040000000000004000000000080000000000000000000000000000000000000000000000000000008000000000000080020000000000000000000000000002000000000000000000000000000080000010000")),
},
// 0x6c33676e8f6077f46a62eabab70bc6d1b1b18a624b0739086d77093a1ecf8266
ReceiptWithBloom {
receipt: Receipt {
tx_type: TxType::EIP1559,
success: true,
cumulative_gas_used: 189253,
logs: vec![
Log {
address: hex!("ddb6dcce6b794415145eb5caa6cd335aeda9c272").into(),
topics: vec![
H256::from_str("c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62").unwrap(),
H256::from_str("0000000000000000000000009d521a04bee134ff8136d2ec957e5bc8c50394ec").unwrap(),
H256::from_str("0000000000000000000000009d521a04bee134ff8136d2ec957e5bc8c50394ec").unwrap(),
H256::from_str("0000000000000000000000000000000000000000000000000000000000000000").unwrap(),
],
data: Bytes::from_str("00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001").unwrap(),
},
Log {
address: hex!("ddb6dcce6b794415145eb5caa6cd335aeda9c272").into(),
topics: vec![
H256::from_str("c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62").unwrap(),
H256::from_str("0000000000000000000000009d521a04bee134ff8136d2ec957e5bc8c50394ec").unwrap(),
H256::from_str("0000000000000000000000000000000000000000000000000000000000000000").unwrap(),
H256::from_str("0000000000000000000000009d521a04bee134ff8136d2ec957e5bc8c50394ec").unwrap(),
],
data: Bytes::from_str("00000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000001").unwrap(),
},
Log {
address: hex!("ddb6dcce6b794415145eb5caa6cd335aeda9c272").into(),
topics: vec![
H256::from_str("0eb774bb9698a73583fe07b6972cf2dcc08d1d97581a22861f45feb86b395820").unwrap(),
H256::from_str("0000000000000000000000009d521a04bee134ff8136d2ec957e5bc8c50394ec").unwrap(),
H256::from_str("0000000000000000000000009d521a04bee134ff8136d2ec957e5bc8c50394ec").unwrap(),
],
data: Bytes::from_str("0000000000000000000000000000000000000000000000000000000000000003").unwrap(),
},
],
#[cfg(feature = "optimism")]
deposit_nonce: None,
},
bloom: Bloom(hex!("00000000000000000000200000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000002000000000020000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000040000000000004000000000080000000000000000000000000000000000000000000000000000008000000000000080020000000000000000000000000002000000000000000000000000000080000000000")),
},
// 0x4d3ecbef04ba7ce7f5ab55be0c61978ca97c117d7da448ed9771d4ff0c720a3f
ReceiptWithBloom {
receipt: Receipt {
tx_type: TxType::EIP1559,
success: true,
cumulative_gas_used: 346969,
logs: vec![
Log {
address: hex!("4200000000000000000000000000000000000006").into(),
topics: vec![
H256::from_str("ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef").unwrap(),
H256::from_str("000000000000000000000000c3feb4ef4c2a5af77add15c95bd98f6b43640cc8").unwrap(),
H256::from_str("0000000000000000000000002992607c1614484fe6d865088e5c048f0650afd4").unwrap(),
],
data: Bytes::from_str("0000000000000000000000000000000000000000000000000018de76816d8000").unwrap(),
},
Log {
address: hex!("cf8e7e6b26f407dee615fc4db18bf829e7aa8c09").into(),
topics: vec![
H256::from_str("ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef").unwrap(),
H256::from_str("0000000000000000000000002992607c1614484fe6d865088e5c048f0650afd4").unwrap(),
H256::from_str("0000000000000000000000008dbffe4c8bf3caf5deae3a99b50cfcf3648cbc09").unwrap(),
],
data: Bytes::from_str("000000000000000000000000000000000000000000000002d24d8e9ac1aa79e2").unwrap(),
},
Log {
address: hex!("2992607c1614484fe6d865088e5c048f0650afd4").into(),
topics: vec![
H256::from_str("1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1").unwrap()
],
data: Bytes::from_str("000000000000000000000000000000000000000000000009bd50642785c15736000000000000000000000000000000000000000000011bb7ac324f724a29bbbf").unwrap(),
},
Log {
address: hex!("2992607c1614484fe6d865088e5c048f0650afd4").into(),
topics: vec![
H256::from_str("d78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822").unwrap(),
H256::from_str("00000000000000000000000029843613c7211d014f5dd5718cf32bcd314914cb").unwrap(),
H256::from_str("0000000000000000000000008dbffe4c8bf3caf5deae3a99b50cfcf3648cbc09").unwrap(),
],
data: Bytes::from_str("0000000000000000000000000000000000000000000000000018de76816d800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d24d8e9ac1aa79e2").unwrap(),
},
Log {
address: hex!("6d0f8d488b669aa9ba2d0f0b7b75a88bf5051cd3").into(),
topics: vec![
H256::from_str("ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef").unwrap(),
H256::from_str("0000000000000000000000008dbffe4c8bf3caf5deae3a99b50cfcf3648cbc09").unwrap(),
H256::from_str("000000000000000000000000c3feb4ef4c2a5af77add15c95bd98f6b43640cc8").unwrap(),
],
data: Bytes::from_str("0x00000000000000000000000000000000000000000000000014bc73062aea8093").unwrap(),
},
Log {
address: hex!("8dbffe4c8bf3caf5deae3a99b50cfcf3648cbc09").into(),
topics: vec![
H256::from_str("1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1").unwrap()
],
data: Bytes::from_str("00000000000000000000000000000000000000000000002f122cfadc1ca82a35000000000000000000000000000000000000000000000665879dc0609945d6d1").unwrap(),
},
Log {
address: hex!("8dbffe4c8bf3caf5deae3a99b50cfcf3648cbc09").into(),
topics: vec![
H256::from_str("d78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822").unwrap(),
H256::from_str("00000000000000000000000029843613c7211d014f5dd5718cf32bcd314914cb").unwrap(),
H256::from_str("000000000000000000000000c3feb4ef4c2a5af77add15c95bd98f6b43640cc8").unwrap(),
],
data: Bytes::from_str("0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d24d8e9ac1aa79e200000000000000000000000000000000000000000000000014bc73062aea80930000000000000000000000000000000000000000000000000000000000000000").unwrap(),
},
],
#[cfg(feature = "optimism")]
deposit_nonce: None,
},
bloom: Bloom(hex!("00200000000000000000000080000000000000000000000000040000100004000000000000000000000000100000000000000000000000000000100000000000000000000000000002000008000000200000000200000000020000000000000040000000000000000400000200000000000000000000000000000010000000000400000000010400000000000000000000000000002000c80000004080002000000000000000400200000000800000000000000000000000000000000000000000000002000000000000000000000000000000000100001000000000000000000000002000000000000000000000010000000000000000000000800000800000")),
},
// 0xf738af5eb00ba23dbc1be2dbce41dbc0180f0085b7fb46646e90bf737af90351
ReceiptWithBloom {
receipt: Receipt {
tx_type: TxType::EIP1559,
success: true,
cumulative_gas_used: 623249,
logs: vec![
Log {
address: hex!("ac6564f3718837caadd42eed742d75c12b90a052").into(),
topics: vec![
H256::from_str("ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef").unwrap(),
H256::from_str("0000000000000000000000000000000000000000000000000000000000000000").unwrap(),
H256::from_str("000000000000000000000000a4fa7f3fbf0677f254ebdb1646146864c305b76e").unwrap(),
H256::from_str("000000000000000000000000000000000000000000000000000000000011a1d3").unwrap(),
],
data: Default::default(),
},
Log {
address: hex!("ac6564f3718837caadd42eed742d75c12b90a052").into(),
topics: vec![
H256::from_str("9d89e36eadf856db0ad9ffb5a569e07f95634dddd9501141ecf04820484ad0dc").unwrap(),
H256::from_str("000000000000000000000000a4fa7f3fbf0677f254ebdb1646146864c305b76e").unwrap(),
H256::from_str("000000000000000000000000000000000000000000000000000000000011a1d3").unwrap(),
],
data: Bytes::from_str("00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000037697066733a2f2f516d515141646b33736538396b47716577395256567a316b68643548375562476d4d4a485a62566f386a6d346f4a2f30000000000000000000").unwrap(),
},
Log {
address: hex!("ac6564f3718837caadd42eed742d75c12b90a052").into(),
topics: vec![
H256::from_str("110d160a1bedeea919a88fbc4b2a9fb61b7e664084391b6ca2740db66fef80fe").unwrap(),
H256::from_str("00000000000000000000000084d47f6eea8f8d87910448325519d1bb45c2972a").unwrap(),
H256::from_str("000000000000000000000000a4fa7f3fbf0677f254ebdb1646146864c305b76e").unwrap(),
H256::from_str("000000000000000000000000000000000000000000000000000000000011a1d3").unwrap(),
],
data: Bytes::from_str("0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000a4fa7f3fbf0677f254ebdb1646146864c305b76e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007717500762343034303661353035646234633961386163316433306335633332303265370000000000000000000000000000000000000000000000000000000000000037697066733a2f2f516d515141646b33736538396b47716577395256567a316b68643548375562476d4d4a485a62566f386a6d346f4a2f30000000000000000000").unwrap(),
},
],
#[cfg(feature = "optimism")]
deposit_nonce: None,
},
bloom: Bloom(hex!("00000000000000000000000000000000400000000000000000000000000000000000004000000000000001000000000000000002000000000100000000000000000000000000000000000008000000000000000000000000000000000000000004000000020000000000000000000800000000000000000000000010200100200008000002000000000000000000800000000000000000000002000000000000000000000000000000080000000000000000000000004000000000000000000000000002000000000000000000000000000000000000200000000000000020002000000000000000002000000000000000000000000000000000000000000000")),
},
];
let root = calculate_receipt_root(&receipts);
assert_eq!(
root,
H256(hex!("e255fed45eae7ede0556fe4fabc77b0d294d18781a5a581cab09127bc4cd9ffb"))
)
}

#[test]
fn check_receipt_root() {
let logs = vec![Log { address: H160::zero(), topics: vec![], data: Default::default() }];
Expand Down