mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: use reth-ethereum-primitives (#13830)
This commit is contained in:
@ -49,6 +49,7 @@ rstest.workspace = true
|
||||
arbitrary.workspace = true
|
||||
secp256k1 = { workspace = true, features = ["rand"] }
|
||||
proptest.workspace = true
|
||||
rand.workspace = true
|
||||
|
||||
[features]
|
||||
default = ["std"]
|
||||
|
||||
@ -308,4 +308,197 @@ mod compact {
|
||||
(receipt.into(), buf)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
#[test]
|
||||
fn test_ensure_backwards_compatibility() {
|
||||
use reth_codecs::{test_utils::UnusedBits, validate_bitflag_backwards_compat};
|
||||
|
||||
assert_eq!(CompactOpReceipt::bitflag_encoded_bytes(), 2);
|
||||
validate_bitflag_backwards_compat!(CompactOpReceipt<'_>, UnusedBits::NotZero);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use alloy_eips::eip2718::Encodable2718;
|
||||
use alloy_primitives::{address, b256, bytes, hex_literal::hex, Bytes};
|
||||
use alloy_rlp::Encodable;
|
||||
use reth_codecs::Compact;
|
||||
|
||||
#[test]
|
||||
fn test_decode_receipt() {
|
||||
reth_codecs::test_utils::test_decode::<OpReceipt>(&hex!(
|
||||
"c30328b52ffd23fc426961a00105007eb0042307705a97e503562eacf2b95060cce9de6de68386b6c155b73a9650021a49e2f8baad17f30faff5899d785c4c0873e45bc268bcf07560106424570d11f9a59e8f3db1efa4ceec680123712275f10d92c3411e1caaa11c7c5d591bc11487168e09934a9986848136da1b583babf3a7188e3aed007a1520f1cf4c1ca7d3482c6c28d37c298613c70a76940008816c4c95644579fd08471dc34732fd0f24"
|
||||
));
|
||||
}
|
||||
|
||||
// Test vector from: https://eips.ethereum.org/EIPS/eip-2481
|
||||
#[test]
|
||||
fn encode_legacy_receipt() {
|
||||
let expected = hex!("f901668001b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f85ff85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100ff");
|
||||
|
||||
let mut data = Vec::with_capacity(expected.length());
|
||||
let receipt = ReceiptWithBloom {
|
||||
receipt: OpReceipt::Legacy(Receipt {
|
||||
status: Eip658Value::Eip658(false),
|
||||
cumulative_gas_used: 0x1,
|
||||
logs: vec![Log::new_unchecked(
|
||||
address!("0000000000000000000000000000000000000011"),
|
||||
vec![
|
||||
b256!("000000000000000000000000000000000000000000000000000000000000dead"),
|
||||
b256!("000000000000000000000000000000000000000000000000000000000000beef"),
|
||||
],
|
||||
bytes!("0100ff"),
|
||||
)],
|
||||
}),
|
||||
logs_bloom: [0; 256].into(),
|
||||
};
|
||||
|
||||
receipt.encode(&mut data);
|
||||
|
||||
// check that the rlp length equals the length of the expected rlp
|
||||
assert_eq!(receipt.length(), expected.len());
|
||||
assert_eq!(data, expected);
|
||||
}
|
||||
|
||||
// Test vector from: https://eips.ethereum.org/EIPS/eip-2481
|
||||
#[test]
|
||||
fn decode_legacy_receipt() {
|
||||
let data = hex!("f901668001b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f85ff85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100ff");
|
||||
|
||||
// EIP658Receipt
|
||||
let expected = ReceiptWithBloom {
|
||||
receipt: OpReceipt::Legacy(Receipt {
|
||||
status: Eip658Value::Eip658(false),
|
||||
cumulative_gas_used: 0x1,
|
||||
logs: vec![Log::new_unchecked(
|
||||
address!("0000000000000000000000000000000000000011"),
|
||||
vec![
|
||||
b256!("000000000000000000000000000000000000000000000000000000000000dead"),
|
||||
b256!("000000000000000000000000000000000000000000000000000000000000beef"),
|
||||
],
|
||||
bytes!("0100ff"),
|
||||
)],
|
||||
}),
|
||||
logs_bloom: [0; 256].into(),
|
||||
};
|
||||
|
||||
let receipt = ReceiptWithBloom::decode(&mut &data[..]).unwrap();
|
||||
assert_eq!(receipt, expected);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn decode_deposit_receipt_regolith_roundtrip() {
|
||||
let data = hex!("b901107ef9010c0182b741b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0833d3bbf");
|
||||
|
||||
// Deposit Receipt (post-regolith)
|
||||
let expected = ReceiptWithBloom {
|
||||
receipt: OpReceipt::Deposit(OpDepositReceipt {
|
||||
inner: Receipt {
|
||||
status: Eip658Value::Eip658(true),
|
||||
cumulative_gas_used: 46913,
|
||||
logs: vec![],
|
||||
},
|
||||
deposit_nonce: Some(4012991),
|
||||
deposit_receipt_version: None,
|
||||
}),
|
||||
logs_bloom: [0; 256].into(),
|
||||
};
|
||||
|
||||
let receipt = ReceiptWithBloom::decode(&mut &data[..]).unwrap();
|
||||
assert_eq!(receipt, expected);
|
||||
|
||||
let mut buf = Vec::with_capacity(data.len());
|
||||
receipt.encode(&mut buf);
|
||||
assert_eq!(buf, &data[..]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn decode_deposit_receipt_canyon_roundtrip() {
|
||||
let data = hex!("b901117ef9010d0182b741b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0833d3bbf01");
|
||||
|
||||
// Deposit Receipt (post-regolith)
|
||||
let expected = ReceiptWithBloom {
|
||||
receipt: OpReceipt::Deposit(OpDepositReceipt {
|
||||
inner: Receipt {
|
||||
status: Eip658Value::Eip658(true),
|
||||
cumulative_gas_used: 46913,
|
||||
logs: vec![],
|
||||
},
|
||||
deposit_nonce: Some(4012991),
|
||||
deposit_receipt_version: Some(1),
|
||||
}),
|
||||
logs_bloom: [0; 256].into(),
|
||||
};
|
||||
|
||||
let receipt = ReceiptWithBloom::decode(&mut &data[..]).unwrap();
|
||||
assert_eq!(receipt, expected);
|
||||
|
||||
let mut buf = Vec::with_capacity(data.len());
|
||||
expected.encode(&mut buf);
|
||||
assert_eq!(buf, &data[..]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn gigantic_receipt() {
|
||||
let receipt = OpReceipt::Legacy(Receipt {
|
||||
status: Eip658Value::Eip658(true),
|
||||
cumulative_gas_used: 16747627,
|
||||
logs: vec![
|
||||
Log::new_unchecked(
|
||||
address!("4bf56695415f725e43c3e04354b604bcfb6dfb6e"),
|
||||
vec![b256!("c69dc3d7ebff79e41f525be431d5cd3cc08f80eaf0f7819054a726eeb7086eb9")],
|
||||
Bytes::from(vec![1; 0xffffff]),
|
||||
),
|
||||
Log::new_unchecked(
|
||||
address!("faca325c86bf9c2d5b413cd7b90b209be92229c2"),
|
||||
vec![b256!("8cca58667b1e9ffa004720ac99a3d61a138181963b294d270d91c53d36402ae2")],
|
||||
Bytes::from(vec![1; 0xffffff]),
|
||||
),
|
||||
],
|
||||
});
|
||||
|
||||
let mut data = vec![];
|
||||
receipt.to_compact(&mut data);
|
||||
let (decoded, _) = OpReceipt::from_compact(&data[..], data.len());
|
||||
assert_eq!(decoded, receipt);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_encode_2718_length() {
|
||||
let receipt = ReceiptWithBloom {
|
||||
receipt: OpReceipt::Eip1559(Receipt {
|
||||
status: Eip658Value::Eip658(true),
|
||||
cumulative_gas_used: 21000,
|
||||
logs: vec![],
|
||||
}),
|
||||
logs_bloom: Bloom::default(),
|
||||
};
|
||||
|
||||
let encoded = receipt.encoded_2718();
|
||||
assert_eq!(
|
||||
encoded.len(),
|
||||
receipt.encode_2718_len(),
|
||||
"Encoded length should match the actual encoded data length"
|
||||
);
|
||||
|
||||
// Test for legacy receipt as well
|
||||
let legacy_receipt = ReceiptWithBloom {
|
||||
receipt: OpReceipt::Legacy(Receipt {
|
||||
status: Eip658Value::Eip658(true),
|
||||
cumulative_gas_used: 21000,
|
||||
logs: vec![],
|
||||
}),
|
||||
logs_bloom: Bloom::default(),
|
||||
};
|
||||
|
||||
let legacy_encoded = legacy_receipt.encoded_2718();
|
||||
assert_eq!(
|
||||
legacy_encoded.len(),
|
||||
legacy_receipt.encode_2718_len(),
|
||||
"Encoded length for legacy receipt should match the actual encoded data length"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user