mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
test(validation): add tests for EIP-7702 transaction filtering in EthMessageFilter (#13756)
This commit is contained in:
@ -331,7 +331,6 @@ impl FilterAnnouncement for EthMessageFilter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(eip7702): update tests as needed
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
@ -514,6 +513,122 @@ mod test {
|
|||||||
assert_eq!(expected_data, partially_valid_data.into_data())
|
assert_eq!(expected_data, partially_valid_data.into_data())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn eth68_announcement_eip7702_tx() {
|
||||||
|
let types = vec![TxType::Eip7702 as u8, TxType::Legacy as u8];
|
||||||
|
let sizes = vec![MAX_MESSAGE_SIZE, MAX_MESSAGE_SIZE];
|
||||||
|
let hashes = vec![
|
||||||
|
B256::from_str("0xbeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefcafa")
|
||||||
|
.unwrap(),
|
||||||
|
B256::from_str("0xbeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefbbbb")
|
||||||
|
.unwrap(),
|
||||||
|
];
|
||||||
|
|
||||||
|
let announcement = NewPooledTransactionHashes68 {
|
||||||
|
types: types.clone(),
|
||||||
|
sizes: sizes.clone(),
|
||||||
|
hashes: hashes.clone(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let filter = EthMessageFilter::default();
|
||||||
|
|
||||||
|
let (outcome, partially_valid_data) = filter.partially_filter_valid_entries(announcement);
|
||||||
|
assert_eq!(outcome, FilterOutcome::Ok);
|
||||||
|
|
||||||
|
let (outcome, valid_data) = filter.filter_valid_entries_68(partially_valid_data);
|
||||||
|
assert_eq!(outcome, FilterOutcome::Ok);
|
||||||
|
|
||||||
|
let mut expected_data = HashMap::default();
|
||||||
|
expected_data.insert(hashes[0], Some((types[0], sizes[0])));
|
||||||
|
expected_data.insert(hashes[1], Some((types[1], sizes[1])));
|
||||||
|
|
||||||
|
assert_eq!(expected_data, valid_data.into_data());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn eth68_announcement_eip7702_tx_size_validation() {
|
||||||
|
let types = vec![TxType::Eip7702 as u8, TxType::Eip7702 as u8, TxType::Eip7702 as u8];
|
||||||
|
// Test with different sizes: too small, reasonable, too large
|
||||||
|
let sizes = vec![
|
||||||
|
1, // too small
|
||||||
|
MAX_MESSAGE_SIZE / 2, // reasonable size
|
||||||
|
MAX_MESSAGE_SIZE + 1, // too large
|
||||||
|
];
|
||||||
|
let hashes = vec![
|
||||||
|
B256::from_str("0xbeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefcafa")
|
||||||
|
.unwrap(),
|
||||||
|
B256::from_str("0xbeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefbbbb")
|
||||||
|
.unwrap(),
|
||||||
|
B256::from_str("0xbeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefcccc")
|
||||||
|
.unwrap(),
|
||||||
|
];
|
||||||
|
|
||||||
|
let announcement = NewPooledTransactionHashes68 {
|
||||||
|
types: types.clone(),
|
||||||
|
sizes: sizes.clone(),
|
||||||
|
hashes: hashes.clone(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let filter = EthMessageFilter::default();
|
||||||
|
|
||||||
|
let (outcome, partially_valid_data) = filter.partially_filter_valid_entries(announcement);
|
||||||
|
assert_eq!(outcome, FilterOutcome::Ok);
|
||||||
|
|
||||||
|
let (outcome, valid_data) = filter.filter_valid_entries_68(partially_valid_data);
|
||||||
|
assert_eq!(outcome, FilterOutcome::Ok);
|
||||||
|
|
||||||
|
let mut expected_data = HashMap::default();
|
||||||
|
|
||||||
|
for i in 0..3 {
|
||||||
|
expected_data.insert(hashes[i], Some((types[i], sizes[i])));
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_eq!(expected_data, valid_data.into_data());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn eth68_announcement_mixed_tx_types() {
|
||||||
|
let types = vec![
|
||||||
|
TxType::Legacy as u8,
|
||||||
|
TxType::Eip7702 as u8,
|
||||||
|
TxType::Eip1559 as u8,
|
||||||
|
TxType::Eip4844 as u8,
|
||||||
|
];
|
||||||
|
let sizes = vec![MAX_MESSAGE_SIZE, MAX_MESSAGE_SIZE, MAX_MESSAGE_SIZE, MAX_MESSAGE_SIZE];
|
||||||
|
let hashes = vec![
|
||||||
|
B256::from_str("0xbeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefcafa")
|
||||||
|
.unwrap(),
|
||||||
|
B256::from_str("0xbeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefbbbb")
|
||||||
|
.unwrap(),
|
||||||
|
B256::from_str("0xbeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefcccc")
|
||||||
|
.unwrap(),
|
||||||
|
B256::from_str("0xbeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefcafebeefdddd")
|
||||||
|
.unwrap(),
|
||||||
|
];
|
||||||
|
|
||||||
|
let announcement = NewPooledTransactionHashes68 {
|
||||||
|
types: types.clone(),
|
||||||
|
sizes: sizes.clone(),
|
||||||
|
hashes: hashes.clone(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let filter = EthMessageFilter::default();
|
||||||
|
|
||||||
|
let (outcome, partially_valid_data) = filter.partially_filter_valid_entries(announcement);
|
||||||
|
assert_eq!(outcome, FilterOutcome::Ok);
|
||||||
|
|
||||||
|
let (outcome, valid_data) = filter.filter_valid_entries_68(partially_valid_data);
|
||||||
|
assert_eq!(outcome, FilterOutcome::Ok);
|
||||||
|
|
||||||
|
let mut expected_data = HashMap::default();
|
||||||
|
// All transaction types should be included as they are valid
|
||||||
|
for i in 0..4 {
|
||||||
|
expected_data.insert(hashes[i], Some((types[i], sizes[i])));
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_eq!(expected_data, valid_data.into_data());
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_display_for_zst() {
|
fn test_display_for_zst() {
|
||||||
let filter = EthMessageFilter::default();
|
let filter = EthMessageFilter::default();
|
||||||
|
|||||||
Reference in New Issue
Block a user