From d091da2df68be7a9471ec0fd58590be47dc7557d Mon Sep 17 00:00:00 2001 From: Kolby Moroz Liebl <31669092+KolbyML@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:42:13 -0600 Subject: [PATCH] fix: resolve pr concerns --- .../src/types/content_key/history.rs | 63 ++++++--- .../src/types/content_value/history.rs | 3 +- ethportal-peertest/src/scenarios/basic.rs | 6 +- ethportal-peertest/src/scenarios/bridge.rs | 4 +- ethportal-peertest/src/scenarios/find.rs | 10 +- ethportal-peertest/src/scenarios/gossip.rs | 124 ++++-------------- .../src/scenarios/offer_accept.rs | 24 ++-- ethportal-peertest/src/scenarios/paginate.rs | 6 +- ethportal-peertest/src/scenarios/state.rs | 2 +- ethportal-peertest/src/scenarios/utp.rs | 6 +- .../src/scenarios/validation.rs | 56 ++++++-- ethportal-peertest/src/utils.rs | 65 +++++---- portal-bridge/src/api/execution.rs | 4 +- portal-bridge/src/bridge/era1.rs | 28 ++-- portal-bridge/src/bridge/history.rs | 2 +- portal-bridge/src/stats.rs | 4 +- rpc/src/eth_rpc.rs | 4 +- src/bin/poll_latest.rs | 2 +- src/bin/sample_range.rs | 2 +- .../mainnet/large_content/15040641/body.bin | Bin 0 -> 126134 bytes .../mainnet/large_content/15040641/header.bin | Bin 0 -> 1031 bytes .../large_content/15040641/receipts.bin | Bin 0 -> 320775 bytes .../{header_with_proof.bin => header.bin} | Bin .../mainnet/large_content/15040709/body.bin | Bin 148057 -> 0 bytes .../15040709/header_with_proof.bin | Bin 1029 -> 0 bytes .../large_content/15040709/receipts.bin | Bin 95268 -> 0 bytes test_assets/mainnet/large_content/README.txt | 24 ++-- tests/rpc_server.rs | 2 +- tests/self_peertest.rs | 14 +- trin-history/src/storage.rs | 3 +- trin-history/src/validation.rs | 30 ++--- trin-state/src/validation/validator.rs | 6 +- trin-validation/src/oracle.rs | 2 +- 33 files changed, 255 insertions(+), 241 deletions(-) create mode 100644 test_assets/mainnet/large_content/15040641/body.bin create mode 100644 test_assets/mainnet/large_content/15040641/header.bin create mode 100644 test_assets/mainnet/large_content/15040641/receipts.bin rename test_assets/mainnet/large_content/15040708/{header_with_proof.bin => header.bin} (100%) delete mode 100644 test_assets/mainnet/large_content/15040709/body.bin delete mode 100644 test_assets/mainnet/large_content/15040709/header_with_proof.bin delete mode 100644 test_assets/mainnet/large_content/15040709/receipts.bin diff --git a/ethportal-api/src/types/content_key/history.rs b/ethportal-api/src/types/content_key/history.rs index 9395a4a3e..20b4235b4 100644 --- a/ethportal-api/src/types/content_key/history.rs +++ b/ethportal-api/src/types/content_key/history.rs @@ -23,9 +23,9 @@ pub const HISTORY_BLOCK_HEADER_BY_NUMBER_KEY_PREFIX: u8 = 0x03; #[derive(Clone, Debug, Eq, PartialEq)] pub enum HistoryContentKey { /// A block header with accumulator proof. - BlockHeaderByHashWithProof(BlockHeaderByHashKey), + BlockHeaderByHash(BlockHeaderByHashKey), /// A block header with accumulator proof. - BlockHeaderByNumberWithProof(BlockHeaderByNumberKey), + BlockHeaderByNumber(BlockHeaderByNumberKey), /// A block body. BlockBody(BlockBodyKey), /// The transaction receipts for a block. @@ -142,7 +142,7 @@ impl TryFrom for HistoryContentKey { }; match selector { HISTORY_BLOCK_HEADER_BY_HASH_KEY_PREFIX => BlockHeaderByHashKey::from_ssz_bytes(key) - .map(Self::BlockHeaderByHashWithProof) + .map(Self::BlockHeaderByHash) .map_err(|e| ContentKeyError::from_decode_error(e, value)), HISTORY_BLOCK_BODY_KEY_PREFIX => BlockBodyKey::from_ssz_bytes(key) .map(Self::BlockBody) @@ -152,7 +152,7 @@ impl TryFrom for HistoryContentKey { .map_err(|e| ContentKeyError::from_decode_error(e, value)), HISTORY_BLOCK_HEADER_BY_NUMBER_KEY_PREFIX => { BlockHeaderByNumberKey::from_ssz_bytes(key) - .map(Self::BlockHeaderByNumberWithProof) + .map(Self::BlockHeaderByNumber) .map_err(|e| ContentKeyError::from_decode_error(e, value)) } _ => Err(ContentKeyError::from_decode_error( @@ -166,8 +166,8 @@ impl TryFrom for HistoryContentKey { impl fmt::Display for HistoryContentKey { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let s = match self { - Self::BlockHeaderByHashWithProof(header) => format!( - "BlockHeaderByHashWithProof {{ block_hash: {} }}", + Self::BlockHeaderByHash(header) => format!( + "BlockHeaderByHash {{ block_hash: {} }}", hex_encode_compact(header.block_hash) ), Self::BlockBody(body) => format!( @@ -180,9 +180,9 @@ impl fmt::Display for HistoryContentKey { hex_encode_compact(receipts.block_hash) ) } - Self::BlockHeaderByNumberWithProof(header) => { + Self::BlockHeaderByNumber(header) => { format!( - "BlockHeaderByNumberWithProof {{ block_number: {} }}", + "BlockHeaderByNumber {{ block_number: {} }}", header.block_number ) } @@ -203,7 +203,7 @@ impl OverlayContentKey for HistoryContentKey { let mut bytes: Vec = Vec::new(); match self { - HistoryContentKey::BlockHeaderByHashWithProof(k) => { + HistoryContentKey::BlockHeaderByHash(k) => { bytes.push(HISTORY_BLOCK_HEADER_BY_HASH_KEY_PREFIX); bytes.extend_from_slice(&k.block_hash); } @@ -215,7 +215,7 @@ impl OverlayContentKey for HistoryContentKey { bytes.push(HISTORY_BLOCK_RECEIPTS_KEY_PREFIX); bytes.extend_from_slice(&k.block_hash); } - HistoryContentKey::BlockHeaderByNumberWithProof(k) => { + HistoryContentKey::BlockHeaderByNumber(k) => { bytes.push(HISTORY_BLOCK_HEADER_BY_NUMBER_KEY_PREFIX); bytes.extend_from_slice(&k.block_number.as_ssz_bytes()); } @@ -252,13 +252,13 @@ mod test { block_hash: BLOCK_HASH, }; - let key = HistoryContentKey::BlockHeaderByHashWithProof(header); + let key = HistoryContentKey::BlockHeaderByHash(header); assert_eq!(key.to_bytes(), expected_content_key); assert_eq!(key.content_id(), expected_content_id); assert_eq!( key.to_string(), - "BlockHeaderByHashWithProof { block_hash: 0xd1c3..621d }" + "BlockHeaderByHash { block_hash: 0xd1c3..621d }" ); assert_eq!(key.to_hex(), KEY_STR); } @@ -278,13 +278,17 @@ mod test { block_number: BLOCK_NUMBER, }; - let key = HistoryContentKey::BlockHeaderByNumberWithProof(header); + let key = HistoryContentKey::BlockHeaderByNumber(header); + + // round trip + let decoded = HistoryContentKey::try_from(key.to_bytes()).unwrap(); + assert_eq!(decoded, key); assert_eq!(key.to_bytes(), expected_content_key); assert_eq!(key.content_id(), expected_content_id); assert_eq!( key.to_string(), - "BlockHeaderByNumberWithProof { block_number: 12345678 }" + "BlockHeaderByNumber { block_number: 12345678 }" ); assert_eq!(key.to_hex(), KEY_STR); } @@ -306,6 +310,10 @@ mod test { let key = HistoryContentKey::BlockBody(body); + // round trip + let decoded = HistoryContentKey::try_from(key.to_bytes()).unwrap(); + assert_eq!(decoded, key); + assert_eq!(key.to_bytes(), expected_content_key); assert_eq!(key.content_id(), expected_content_id); assert_eq!(key.to_string(), "BlockBody { block_hash: 0xd1c3..621d }"); @@ -339,13 +347,30 @@ mod test { } #[test] - fn ser_de_block_header() { + fn ser_de_block_header_by_hash() { let content_key_json = "\"0x00d1c390624d3bd4e409a61a858e5dcc5517729a9170d014a6c96530d64dd8621d\""; - let expected_content_key = - HistoryContentKey::BlockHeaderByHashWithProof(BlockHeaderByHashKey { - block_hash: BLOCK_HASH, - }); + let expected_content_key = HistoryContentKey::BlockHeaderByHash(BlockHeaderByHashKey { + block_hash: BLOCK_HASH, + }); + + let content_key: HistoryContentKey = serde_json::from_str(content_key_json).unwrap(); + + assert_eq!(content_key, expected_content_key); + assert_eq!( + serde_json::to_string(&content_key).unwrap(), + content_key_json + ); + } + + #[test] + fn ser_de_block_header_by_number() { + // let content_key_json = "12345678"; + let content_key_json = "\"0x034e61bc0000000000\""; + + let expected_content_key = HistoryContentKey::BlockHeaderByNumber(BlockHeaderByNumberKey { + block_number: 12345678, + }); let content_key: HistoryContentKey = serde_json::from_str(content_key_json).unwrap(); diff --git a/ethportal-api/src/types/content_value/history.rs b/ethportal-api/src/types/content_value/history.rs index 1ced2a479..37651f327 100644 --- a/ethportal-api/src/types/content_value/history.rs +++ b/ethportal-api/src/types/content_value/history.rs @@ -30,8 +30,7 @@ impl ContentValue for HistoryContentValue { fn decode(key: &Self::TContentKey, buf: &[u8]) -> Result { match key { - HistoryContentKey::BlockHeaderByHashWithProof(_) - | HistoryContentKey::BlockHeaderByNumberWithProof(_) => { + HistoryContentKey::BlockHeaderByHash(_) | HistoryContentKey::BlockHeaderByNumber(_) => { if let Ok(value) = HeaderWithProof::from_ssz_bytes(buf) { return Ok(Self::BlockHeaderWithProof(value)); } diff --git a/ethportal-peertest/src/scenarios/basic.rs b/ethportal-peertest/src/scenarios/basic.rs index 5115220a8..f33994cdb 100644 --- a/ethportal-peertest/src/scenarios/basic.rs +++ b/ethportal-peertest/src/scenarios/basic.rs @@ -1,4 +1,4 @@ -use crate::{utils::fixture_header_with_proof, Peertest, PeertestNode}; +use crate::{utils::fixture_header_by_hash, Peertest, PeertestNode}; use alloy_primitives::{B256, U256}; use ethportal_api::{ types::{ @@ -177,7 +177,7 @@ pub async fn test_find_nodes_zero_distance( pub async fn test_history_store(target: &Client) { info!("Testing portal_historyStore"); - let (content_key, content_value) = fixture_header_with_proof(); + let (content_key, content_value) = fixture_header_by_hash(); let result = HistoryNetworkApiClient::store(target, content_key, content_value.encode()) .await .unwrap(); @@ -186,7 +186,7 @@ pub async fn test_history_store(target: &Client) { pub async fn test_history_local_content_absent(target: &Client) { info!("Testing portal_historyLocalContent absent"); - let content_key = HistoryContentKey::BlockHeaderByHashWithProof(BlockHeaderByHashKey { + let content_key = HistoryContentKey::BlockHeaderByHash(BlockHeaderByHashKey { block_hash: B256::random().into(), }); let error = HistoryNetworkApiClient::local_content(target, content_key) diff --git a/ethportal-peertest/src/scenarios/bridge.rs b/ethportal-peertest/src/scenarios/bridge.rs index 0ddc8e2f4..e71292ea4 100644 --- a/ethportal-peertest/src/scenarios/bridge.rs +++ b/ethportal-peertest/src/scenarios/bridge.rs @@ -1,5 +1,5 @@ use crate::{ - utils::{fixture_header_with_proof_1000010, wait_for_beacon_content, wait_for_history_content}, + utils::{fixture_header_by_hash_1000010, wait_for_beacon_content, wait_for_history_content}, Peertest, }; use ethportal_api::{ @@ -38,7 +38,7 @@ pub async fn test_history_bridge(peertest: &Peertest, portal_client: &HttpClient DEFAULT_GOSSIP_LIMIT, ); bridge.launch().await; - let (content_key, content_value) = fixture_header_with_proof_1000010(); + let (content_key, content_value) = fixture_header_by_hash_1000010(); // Check if the stored content value in bootnode's DB matches the offered let received_content_value = wait_for_history_content(&peertest.bootnode.ipc_client, content_key).await; diff --git a/ethportal-peertest/src/scenarios/find.rs b/ethportal-peertest/src/scenarios/find.rs index b1ba1bd66..0b9bf1d0d 100644 --- a/ethportal-peertest/src/scenarios/find.rs +++ b/ethportal-peertest/src/scenarios/find.rs @@ -4,7 +4,7 @@ use discv5::enr::NodeId; use jsonrpsee::async_client::Client; use tracing::info; -use crate::{utils::fixture_header_with_proof, Peertest}; +use crate::{utils::fixture_header_by_hash, Peertest}; use ethportal_api::{ types::{portal::ContentInfo, portal_wire::ProtocolId}, utils::bytes::hex_decode, @@ -45,7 +45,7 @@ pub async fn test_recursive_find_nodes_random(protocol: ProtocolId, peertest: &P pub async fn test_find_content_return_enr(target: &Client, peertest: &Peertest) { info!("Testing find content returns enrs properly"); - let (content_key, _) = fixture_header_with_proof(); + let (content_key, _) = fixture_header_by_hash(); // check if we can fetch data from routing table match HistoryNetworkApiClient::get_enr( @@ -83,7 +83,7 @@ pub async fn test_find_content_return_enr(target: &Client, peertest: &Peertest) pub async fn test_trace_recursive_find_content(peertest: &Peertest) { info!("Testing trace recursive find content"); - let (content_key, content_value) = fixture_header_with_proof(); + let (content_key, content_value) = fixture_header_by_hash(); let store_result = HistoryNetworkApiClient::store( &peertest.bootnode.ipc_client, content_key.clone(), @@ -138,7 +138,7 @@ pub async fn test_trace_recursive_find_content(peertest: &Peertest) { // This test ensures that when content is not found the correct response is returned. pub async fn test_trace_recursive_find_content_for_absent_content(peertest: &Peertest) { let client = &peertest.nodes[0].ipc_client; - let (content_key, _) = fixture_header_with_proof(); + let (content_key, _) = fixture_header_by_hash(); let error = HistoryNetworkApiClient::trace_recursive_find_content(client, content_key) .await @@ -151,7 +151,7 @@ pub async fn test_trace_recursive_find_content_for_absent_content(peertest: &Pee } pub async fn test_trace_recursive_find_content_local_db(peertest: &Peertest) { - let (content_key, content_value) = fixture_header_with_proof(); + let (content_key, content_value) = fixture_header_by_hash(); let store_result = HistoryNetworkApiClient::store( &peertest.bootnode.ipc_client, diff --git a/ethportal-peertest/src/scenarios/gossip.rs b/ethportal-peertest/src/scenarios/gossip.rs index 7c1edb81d..25546b4a9 100644 --- a/ethportal-peertest/src/scenarios/gossip.rs +++ b/ethportal-peertest/src/scenarios/gossip.rs @@ -4,9 +4,9 @@ use tracing::info; use crate::{ utils::{ - fixture_block_body_15040708, fixture_block_body_15040709, - fixture_header_by_hash_with_proof_15040708, fixture_header_by_hash_with_proof_15040709, - fixture_header_with_proof, fixture_receipts_15040708, wait_for_history_content, + fixture_block_body_15040708, fixture_header_by_hash, + fixture_header_by_hash_with_proof_15040641, fixture_header_by_hash_with_proof_15040708, + fixture_receipts_15040641, wait_for_history_content, }, Peertest, }; @@ -18,7 +18,7 @@ pub async fn test_gossip_with_trace(peertest: &Peertest, target: &Client) { info!("Testing Gossip with tracing"); let _ = target.ping(peertest.bootnode.enr.clone()).await.unwrap(); - let (content_key, content_value) = fixture_header_with_proof(); + let (content_key, content_value) = fixture_header_by_hash(); let result = target .trace_gossip(content_key.clone(), content_value.encode()) .await @@ -91,10 +91,9 @@ pub async fn test_gossip_dropped_with_offer(peertest: &Peertest, target: &Client .unwrap(); let fresh_enr = fresh_target.node_info().await.unwrap().enr; - // Store block_1 locally in client that is not connected to the network - let (header_key_1, header_value_1) = fixture_header_by_hash_with_proof_15040708(); - let (body_key_1, body_value_1) = fixture_block_body_15040708(); - let (receipts_key_1, receipts_value_1) = fixture_receipts_15040708(); + // Store receipt_1 locally in client that is not connected to the network + let (header_key_1, header_value_1) = fixture_header_by_hash_with_proof_15040641(); + let (receipts_key_1, receipts_value_1) = fixture_receipts_15040641(); let store_result = HistoryNetworkApiClient::store( &fresh_target, header_key_1.clone(), @@ -103,11 +102,6 @@ pub async fn test_gossip_dropped_with_offer(peertest: &Peertest, target: &Client .await .unwrap(); assert!(store_result); - let store_result = - HistoryNetworkApiClient::store(&fresh_target, body_key_1.clone(), body_value_1.encode()) - .await - .unwrap(); - assert!(store_result); let store_result = HistoryNetworkApiClient::store( &fresh_target, receipts_key_1.clone(), @@ -117,70 +111,48 @@ pub async fn test_gossip_dropped_with_offer(peertest: &Peertest, target: &Client .unwrap(); assert!(store_result); - // check that fresh target has block_1 + // check that fresh target has receipt_1 assert!( HistoryNetworkApiClient::local_content(&fresh_target, header_key_1.clone()) .await .is_ok() ); - assert!( - HistoryNetworkApiClient::local_content(&fresh_target, body_key_1.clone()) - .await - .is_ok() - ); assert!( HistoryNetworkApiClient::local_content(&fresh_target, receipts_key_1.clone()) .await .is_ok() ); - // check that target does not have block_1 + // check that target does not have receipt_1 assert!( HistoryNetworkApiClient::local_content(target, header_key_1.clone()) .await .is_err() ); - assert!( - HistoryNetworkApiClient::local_content(target, body_key_1.clone()) - .await - .is_err() - ); assert!( HistoryNetworkApiClient::local_content(target, receipts_key_1.clone()) .await .is_err() ); - // check that peertest node does not have block_1 + // check that peertest node does not have receipt_1 assert!(HistoryNetworkApiClient::local_content( &peertest.nodes[0].ipc_client, header_key_1.clone() ) .await .is_err()); - assert!(HistoryNetworkApiClient::local_content( - &peertest.nodes[0].ipc_client, - body_key_1.clone() - ) - .await - .is_err()); assert!(HistoryNetworkApiClient::local_content( &peertest.nodes[0].ipc_client, receipts_key_1.clone() ) .await .is_err()); - // check that peertest bootnode does not have accumulator_1 + // check that peertest bootnode does not have receipt_1 assert!(HistoryNetworkApiClient::local_content( &peertest.bootnode.ipc_client, header_key_1.clone() ) .await .is_err()); - assert!(HistoryNetworkApiClient::local_content( - &peertest.bootnode.ipc_client, - body_key_1.clone() - ) - .await - .is_err()); assert!(HistoryNetworkApiClient::local_content( &peertest.bootnode.ipc_client, receipts_key_1.clone() @@ -202,10 +174,10 @@ pub async fn test_gossip_dropped_with_offer(peertest: &Peertest, target: &Client .await .unwrap(); - // offer block_2 with receipt from target to fresh target + // offer body_2 with receipt from target to fresh target // doesn't store the content locally in target - let (header_key_2, header_value_2) = fixture_header_by_hash_with_proof_15040709(); - let (body_key_2, body_value_2) = fixture_block_body_15040709(); + let (header_key_2, header_value_2) = fixture_header_by_hash_with_proof_15040708(); + let (body_key_2, body_value_2) = fixture_block_body_15040708(); target .offer( fresh_enr.clone(), @@ -228,7 +200,7 @@ pub async fn test_gossip_dropped_with_offer(peertest: &Peertest, target: &Client body_value_2, wait_for_history_content(&fresh_target, body_key_2.clone()).await ); - // check that the target has block_2, block_1's header and receipts, but not the body + // check that the target has block_1 and block_2 assert_eq!( header_value_2, wait_for_history_content(target, header_key_2.clone()).await @@ -245,13 +217,8 @@ pub async fn test_gossip_dropped_with_offer(peertest: &Peertest, target: &Client receipts_value_1, wait_for_history_content(target, receipts_key_1.clone()).await ); - assert!( - HistoryNetworkApiClient::local_content(target, body_key_1.clone()) - .await - .is_err() - ); - // check that the peertest bootnode has block_2, block_1's header and receipts, but not the body + // check that the peertest bootnode has block_1 and block_2 assert_eq!( header_value_2, wait_for_history_content(&peertest.bootnode.ipc_client, header_key_2.clone()).await @@ -268,13 +235,8 @@ pub async fn test_gossip_dropped_with_offer(peertest: &Peertest, target: &Client receipts_value_1, wait_for_history_content(&peertest.bootnode.ipc_client, receipts_key_1.clone()).await ); - assert!(HistoryNetworkApiClient::local_content( - &peertest.bootnode.ipc_client, - body_key_1.clone() - ) - .await - .is_err()); - // check that the peertest node has block_2, block_1's header and receipts, but not the body + + // check that the peertest node has block_1 and block_2 assert_eq!( header_value_2, wait_for_history_content(&peertest.nodes[0].ipc_client, header_key_2.clone()).await @@ -291,12 +253,7 @@ pub async fn test_gossip_dropped_with_offer(peertest: &Peertest, target: &Client receipts_value_1, wait_for_history_content(&peertest.nodes[0].ipc_client, receipts_key_1.clone()).await ); - assert!(HistoryNetworkApiClient::local_content( - &peertest.nodes[0].ipc_client, - body_key_1.clone() - ) - .await - .is_err()); + // this must be at end of test, to guarantee that all propagation has concluded // check that the fresh target has dropped block_receipt_1 assert!( @@ -320,10 +277,9 @@ pub async fn test_gossip_dropped_with_find_content(peertest: &Peertest, target: .await .unwrap(); - // Store block_1 locally in client that is not connected to the network - let (header_key_1, header_value_1) = fixture_header_by_hash_with_proof_15040708(); - let (body_key_1, body_value_1) = fixture_block_body_15040708(); - let (receipts_key_1, receipts_value_1) = fixture_receipts_15040708(); + // Store receipts_1 locally in client that is not connected to the network + let (header_key_1, header_value_1) = fixture_header_by_hash_with_proof_15040641(); + let (receipts_key_1, receipts_value_1) = fixture_receipts_15040641(); let store_result = HistoryNetworkApiClient::store( &fresh_target, header_key_1.clone(), @@ -332,11 +288,6 @@ pub async fn test_gossip_dropped_with_find_content(peertest: &Peertest, target: .await .unwrap(); assert!(store_result); - let store_result = - HistoryNetworkApiClient::store(&fresh_target, body_key_1.clone(), body_value_1.encode()) - .await - .unwrap(); - assert!(store_result); let store_result = HistoryNetworkApiClient::store( &fresh_target, receipts_key_1.clone(), @@ -346,9 +297,9 @@ pub async fn test_gossip_dropped_with_find_content(peertest: &Peertest, target: .unwrap(); assert!(store_result); - // Store block_2 minus receipts locally in target - let (header_key_2, header_value_2) = fixture_header_by_hash_with_proof_15040709(); - let (body_key_2, body_value_2) = fixture_block_body_15040709(); + // Store body_2 locally in target + let (header_key_2, header_value_2) = fixture_header_by_hash_with_proof_15040708(); + let (body_key_2, body_value_2) = fixture_block_body_15040708(); let store_result = HistoryNetworkApiClient::store(target, header_key_2.clone(), header_value_2.encode()) .await @@ -381,12 +332,12 @@ pub async fn test_gossip_dropped_with_find_content(peertest: &Peertest, target: .await .unwrap(); - // check that the fresh target has stored block_body_2 stored + // check that the fresh target has stored body_2 stored assert_eq!( body_value_2, wait_for_history_content(&fresh_target, body_key_2.clone()).await ); - // check that the target has block_2, block_1's header and receipts, but not the body + // check that the target has block_1 and block_2 assert_eq!( header_value_2, wait_for_history_content(target, header_key_2.clone()).await @@ -403,12 +354,7 @@ pub async fn test_gossip_dropped_with_find_content(peertest: &Peertest, target: receipts_value_1, wait_for_history_content(target, receipts_key_1.clone()).await ); - assert!( - HistoryNetworkApiClient::local_content(target, body_key_1.clone()) - .await - .is_err() - ); - // check that the peertest bootnode has block_2, block_1's header and receipts, but not the body + // check that the peertest bootnode has block_1 and block_2 assert_eq!( header_value_2, wait_for_history_content(&peertest.bootnode.ipc_client, header_key_2.clone()).await @@ -425,14 +371,8 @@ pub async fn test_gossip_dropped_with_find_content(peertest: &Peertest, target: receipts_value_1, wait_for_history_content(&peertest.bootnode.ipc_client, receipts_key_1.clone()).await ); - assert!(HistoryNetworkApiClient::local_content( - &peertest.bootnode.ipc_client, - body_key_1.clone() - ) - .await - .is_err()); - // check that the peertest node has block_2, block_1's header and receipts, but not the body + // check that the peertest node has block_1 and block_2 assert_eq!( header_value_2, wait_for_history_content(&peertest.nodes[0].ipc_client, header_key_2.clone()).await @@ -449,12 +389,6 @@ pub async fn test_gossip_dropped_with_find_content(peertest: &Peertest, target: receipts_value_1, wait_for_history_content(&peertest.nodes[0].ipc_client, receipts_key_1.clone()).await ); - assert!(HistoryNetworkApiClient::local_content( - &peertest.nodes[0].ipc_client, - body_key_1.clone() - ) - .await - .is_err()); // this must be at end of test, to guarantee that all propagation has concluded // check that the fresh target has dropped block_receipt_1 diff --git a/ethportal-peertest/src/scenarios/offer_accept.rs b/ethportal-peertest/src/scenarios/offer_accept.rs index 2d159452b..affeaeaea 100644 --- a/ethportal-peertest/src/scenarios/offer_accept.rs +++ b/ethportal-peertest/src/scenarios/offer_accept.rs @@ -4,10 +4,10 @@ use tracing::info; use crate::{ utils::{ - fixture_block_body, fixture_block_body_15040708, fixture_block_body_15040709, - fixture_header_by_hash_with_proof_15040708, fixture_header_by_hash_with_proof_15040709, - fixture_header_with_proof, fixture_receipts_15040708, fixture_receipts_15040709, - wait_for_history_content, + fixture_block_body, fixture_block_body_15040641, fixture_block_body_15040708, + fixture_header_by_hash, fixture_header_by_hash_with_proof_15040641, + fixture_header_by_hash_with_proof_15040708, fixture_receipts_15040641, + fixture_receipts_15040708, wait_for_history_content, }, Peertest, }; @@ -19,7 +19,7 @@ use ethportal_api::{ pub async fn test_unpopulated_offer(peertest: &Peertest, target: &Client) { info!("Testing Unpopulated OFFER/ACCEPT flow"); - let (content_key, content_value) = fixture_header_with_proof(); + let (content_key, content_value) = fixture_header_by_hash(); // Store content to offer in the testnode db let store_result = target .store(content_key.clone(), content_value.encode()) @@ -53,7 +53,7 @@ pub async fn test_unpopulated_offer_fails_with_missing_content( ) { info!("Testing Unpopulated OFFER/ACCEPT flow with missing content"); - let (content_key, _content_value) = fixture_header_with_proof(); + let (content_key, _content_value) = fixture_header_by_hash(); // validate that wire offer fails if content not available locally match target @@ -75,7 +75,7 @@ pub async fn test_unpopulated_offer_fails_with_missing_content( pub async fn test_populated_offer(peertest: &Peertest, target: &Client) { info!("Testing Populated Offer/ACCEPT flow"); - let (content_key, content_value) = fixture_header_with_proof(); + let (content_key, content_value) = fixture_header_by_hash(); let result = target .offer( Enr::from_str(&peertest.bootnode.enr.to_base64()).unwrap(), @@ -99,7 +99,7 @@ pub async fn test_populated_offer_with_trace(peertest: &Peertest, target: &Clien info!("Testing Populated Offer/ACCEPT flow with trace"); // store header for validation - let (content_key, content_value) = fixture_header_with_proof(); + let (content_key, content_value) = fixture_header_by_hash(); let store_result = peertest .bootnode .ipc_client @@ -133,7 +133,7 @@ pub async fn test_offer_propagates_gossip(peertest: &Peertest, target: &Client) info!("Testing populated offer propagates gossip"); // get content values to gossip - let (content_key, content_value) = fixture_header_with_proof(); + let (content_key, content_value) = fixture_header_by_hash(); // use populated offer which means content will *not* be stored in the target's local db target .offer( @@ -313,9 +313,9 @@ pub async fn test_offer_propagates_gossip_multiple_large_content_values( .unwrap(); assert!(store_result); - let (header_key_2, header_value_2) = fixture_header_by_hash_with_proof_15040709(); - let (body_key_2, body_value_2) = fixture_block_body_15040709(); - let (receipts_key_2, receipts_value_2) = fixture_receipts_15040709(); + let (header_key_2, header_value_2) = fixture_header_by_hash_with_proof_15040641(); + let (body_key_2, body_value_2) = fixture_block_body_15040641(); + let (receipts_key_2, receipts_value_2) = fixture_receipts_15040641(); // Store content to offer in the testnode db let store_result = target diff --git a/ethportal-peertest/src/scenarios/paginate.rs b/ethportal-peertest/src/scenarios/paginate.rs index 2bba11c57..af4ad2962 100644 --- a/ethportal-peertest/src/scenarios/paginate.rs +++ b/ethportal-peertest/src/scenarios/paginate.rs @@ -3,7 +3,7 @@ use ethportal_api::{ HistoryNetworkApiClient, }; -use crate::{utils::fixture_header_with_proof, Peertest}; +use crate::{utils::fixture_header_by_hash, Peertest}; pub async fn test_paginate_local_storage(peertest: &Peertest) { let ipc_client = &peertest.bootnode.ipc_client; @@ -14,7 +14,7 @@ pub async fn test_paginate_local_storage(peertest: &Peertest) { let mut content_keys: Vec = (0..20_u8) .map(|_| { - serde_json::to_string(&HistoryContentKey::BlockHeaderByHashWithProof( + serde_json::to_string(&HistoryContentKey::BlockHeaderByHash( BlockHeaderByHashKey { block_hash: rand::random(), }, @@ -22,7 +22,7 @@ pub async fn test_paginate_local_storage(peertest: &Peertest) { .unwrap() }) .collect(); - let (_, content_value) = fixture_header_with_proof(); + let (_, content_value) = fixture_header_by_hash(); for content_key in content_keys.clone().into_iter() { // Store content to offer in the testnode db let store_result = ipc_client diff --git a/ethportal-peertest/src/scenarios/state.rs b/ethportal-peertest/src/scenarios/state.rs index 5e0ec8f9e..0059bb27f 100644 --- a/ethportal-peertest/src/scenarios/state.rs +++ b/ethportal-peertest/src/scenarios/state.rs @@ -46,7 +46,7 @@ pub async fn test_state_gossip_contract_bytecode(peertest: &Peertest, target: &C async fn test_state_offer(fixture: &StateFixture, target: &Client, peer: &PeertestNode) { // Make sure that peer has block header let history_content_key = - HistoryContentKey::BlockHeaderByHashWithProof(fixture.block_header.hash().into()); + HistoryContentKey::BlockHeaderByHash(fixture.block_header.hash().into()); let history_content_value = HistoryContentValue::BlockHeaderWithProof(HeaderWithProof { header: fixture.block_header.clone(), proof: BlockHeaderProof::None(SszNone::default()), diff --git a/ethportal-peertest/src/scenarios/utp.rs b/ethportal-peertest/src/scenarios/utp.rs index 395ee31ce..b6fe36261 100644 --- a/ethportal-peertest/src/scenarios/utp.rs +++ b/ethportal-peertest/src/scenarios/utp.rs @@ -1,5 +1,5 @@ use crate::{ - utils::{fixture_block_body, fixture_header_with_proof}, + utils::{fixture_block_body, fixture_header_by_hash}, Peertest, }; use discv5::enr::NodeId; @@ -13,7 +13,7 @@ pub async fn test_recursive_utp(peertest: &Peertest) { info!("Test recursive utp"); // store header_with_proof to validate block body - let (content_key, content_value) = fixture_header_with_proof(); + let (content_key, content_value) = fixture_header_by_hash(); let store_result = peertest.nodes[0] .ipc_client .store(content_key.clone(), content_value.encode()) @@ -54,7 +54,7 @@ pub async fn test_trace_recursive_utp(peertest: &Peertest) { info!("Test trace recursive utp"); // store header_with_proof to validate block body - let (content_key, content_value) = fixture_header_with_proof(); + let (content_key, content_value) = fixture_header_by_hash(); let store_result = peertest.nodes[0] .ipc_client .store(content_key.clone(), content_value.encode()) diff --git a/ethportal-peertest/src/scenarios/validation.rs b/ethportal-peertest/src/scenarios/validation.rs index 1bb0ddc77..3630d37dc 100644 --- a/ethportal-peertest/src/scenarios/validation.rs +++ b/ethportal-peertest/src/scenarios/validation.rs @@ -1,5 +1,7 @@ use crate::{ - utils::{fixture_block_body, fixture_header_with_proof, fixture_receipts}, + utils::{ + fixture_block_body, fixture_header_by_hash, fixture_header_by_number, fixture_receipts, + }, Peertest, }; use alloy_primitives::B256; @@ -11,11 +13,47 @@ use ethportal_api::{ use std::str::FromStr; use tracing::info; -pub async fn test_validate_pre_merge_header_with_proof(peertest: &Peertest, target: &Client) { - info!("Test validating a pre-merge header-with-proof"); +pub async fn test_validate_pre_merge_header_by_hash(peertest: &Peertest, target: &Client) { + info!("Test validating a pre-merge header by block hash"); - // store header_with_proof - let (content_key, content_value) = fixture_header_with_proof(); + // store header_by_hash + let (content_key, content_value) = fixture_header_by_hash(); + + let store_result = peertest + .bootnode + .ipc_client + .store(content_key.clone(), content_value.encode()) + .await + .unwrap(); + + assert!(store_result); + + // calling find_content since it only returns the found data if validation was successful + let result = target + .find_content( + Enr::from_str(&peertest.bootnode.enr.to_base64()).unwrap(), + content_key.clone(), + ) + .await + .unwrap(); + + match result { + ContentInfo::Content { + content, + utp_transfer, + } => { + assert_eq!(content, content_value.encode()); + assert!(!utp_transfer); + } + _ => panic!("Content values should match"), + } +} + +pub async fn test_validate_pre_merge_header_by_number(peertest: &Peertest, target: &Client) { + info!("Test validating a pre-merge header by block number"); + + // store header_by_number + let (content_key, content_value) = fixture_header_by_number(); let store_result = peertest .bootnode @@ -51,8 +89,8 @@ pub async fn test_invalidate_header_by_hash(peertest: &Peertest, target: &Client info!("Test invalidating a pre-merge header-with-proof by header hash"); // store header_with_proof - doesn't perform validation - let (_, content_value) = fixture_header_with_proof(); - let invalid_content_key = HistoryContentKey::BlockHeaderByHashWithProof(BlockHeaderByHashKey { + let (_, content_value) = fixture_header_by_hash(); + let invalid_content_key = HistoryContentKey::BlockHeaderByHash(BlockHeaderByHashKey { block_hash: B256::random().into(), }); @@ -81,7 +119,7 @@ pub async fn test_invalidate_header_by_hash(peertest: &Peertest, target: &Client pub async fn test_validate_pre_merge_block_body(peertest: &Peertest, target: &Client) { info!("Test validating a pre-merge block body"); // store header_with_proof to validate block body - let (content_key, content_value) = fixture_header_with_proof(); + let (content_key, content_value) = fixture_header_by_hash(); let store_result = target .store(content_key, content_value.encode()) .await @@ -124,7 +162,7 @@ pub async fn test_validate_pre_merge_block_body(peertest: &Peertest, target: &Cl pub async fn test_validate_pre_merge_receipts(peertest: &Peertest, target: &Client) { info!("Test validating pre-merge receipts"); // store header_with_proof to validate block body - let (content_key, content_value) = fixture_header_with_proof(); + let (content_key, content_value) = fixture_header_by_hash(); let store_result = target .store(content_key, content_value.encode()) .await diff --git a/ethportal-peertest/src/utils.rs b/ethportal-peertest/src/utils.rs index d40d78a9c..7caeb6449 100644 --- a/ethportal-peertest/src/utils.rs +++ b/ethportal-peertest/src/utils.rs @@ -16,7 +16,8 @@ use ureq::serde::Deserialize; use ethportal_api::{ types::{ - content_key::history::BlockHeaderByHashKey, execution::header_with_proof::HeaderWithProof, + content_key::history::{BlockHeaderByHashKey, BlockHeaderByNumberKey}, + execution::header_with_proof::HeaderWithProof, }, BeaconContentKey, BeaconContentValue, BeaconNetworkApiClient, BlockBodyKey, BlockReceiptsKey, ContentValue, Header, HistoryContentKey, HistoryContentValue, HistoryNetworkApiClient, @@ -117,16 +118,32 @@ fn read_fixture(file_name: &str) -> (HistoryContentKey, HistoryContentValue) { /// History HeaderWithProof content key & value /// Block #1000010 -pub fn fixture_header_with_proof_1000010() -> (HistoryContentKey, HistoryContentValue) { +pub fn fixture_header_by_hash_1000010() -> (HistoryContentKey, HistoryContentValue) { read_fixture("portal-spec-tests/tests/mainnet/history/headers_with_proof/1000010.yaml") } -/// History HeaderWithProof content key & value +/// History HeaderByHash content key & value /// Block #14764013 (pre-merge) -pub fn fixture_header_with_proof() -> (HistoryContentKey, HistoryContentValue) { +pub fn fixture_header_by_hash() -> (HistoryContentKey, HistoryContentValue) { read_fixture("portal-spec-tests/tests/mainnet/history/headers_with_proof/14764013.yaml") } +/// History HeaderByNumber content key & value +/// Block #14764013 (pre-merge) +pub fn fixture_header_by_number() -> (HistoryContentKey, HistoryContentValue) { + let (_, content_value) = + read_fixture("portal-spec-tests/tests/mainnet/history/headers_with_proof/14764013.yaml"); + + // Create a content key from the block number + let HistoryContentValue::BlockHeaderWithProof(header_with_proof) = content_value.clone() else { + panic!("Expected HistoryContentValue::BlockHeaderWithProof") + }; + let content_key = HistoryContentKey::BlockHeaderByNumber(BlockHeaderByNumberKey { + block_number: header_with_proof.header.number, + }); + (content_key, content_value) +} + /// History BlockBody content key & value /// Block #14764013 (pre-merge) pub fn fixture_block_body() -> (HistoryContentKey, HistoryContentValue) { @@ -154,39 +171,39 @@ impl Display for DependentType { } /// History HeaderWithProof content key & value -/// Block #15040708 (pre-merge) -pub fn fixture_header_by_hash_with_proof_15040708() -> (HistoryContentKey, HistoryContentValue) { - read_binary_history_fixture(15040708, None) +/// Block #15040641 (pre-merge) +pub fn fixture_header_by_hash_with_proof_15040641() -> (HistoryContentKey, HistoryContentValue) { + read_binary_history_fixture(15040641, None) } /// History BlockBody content key & value -/// Block #15040708 (pre-merge) -pub fn fixture_block_body_15040708() -> (HistoryContentKey, HistoryContentValue) { - read_binary_history_fixture(15040708, Some(DependentType::BlockBody)) +/// Block #15040641 (pre-merge) +pub fn fixture_block_body_15040641() -> (HistoryContentKey, HistoryContentValue) { + read_binary_history_fixture(15040641, Some(DependentType::BlockBody)) } /// History Receipts content key & value -/// Block #15040708 (pre-merge) -pub fn fixture_receipts_15040708() -> (HistoryContentKey, HistoryContentValue) { - read_binary_history_fixture(15040708, Some(DependentType::Receipts)) +/// Block #15040641 (pre-merge) +pub fn fixture_receipts_15040641() -> (HistoryContentKey, HistoryContentValue) { + read_binary_history_fixture(15040641, Some(DependentType::Receipts)) } /// History HeaderWithProof content key & value -/// Block #15040709 (pre-merge) -pub fn fixture_header_by_hash_with_proof_15040709() -> (HistoryContentKey, HistoryContentValue) { - read_binary_history_fixture(15040709, None) +/// Block #15040708 (pre-merge) +pub fn fixture_header_by_hash_with_proof_15040708() -> (HistoryContentKey, HistoryContentValue) { + read_binary_history_fixture(15040708, None) } /// History BlockBody content key & value -/// Block #15040709 (pre-merge) -pub fn fixture_block_body_15040709() -> (HistoryContentKey, HistoryContentValue) { - read_binary_history_fixture(15040709, Some(DependentType::BlockBody)) +/// Block #15040708 (pre-merge) +pub fn fixture_block_body_15040708() -> (HistoryContentKey, HistoryContentValue) { + read_binary_history_fixture(15040708, Some(DependentType::BlockBody)) } /// History Receipts content key & value -/// Block #15040709 (pre-merge) -pub fn fixture_receipts_15040709() -> (HistoryContentKey, HistoryContentValue) { - read_binary_history_fixture(15040709, Some(DependentType::Receipts)) +/// Block #15040708 (pre-merge) +pub fn fixture_receipts_15040708() -> (HistoryContentKey, HistoryContentValue) { + read_binary_history_fixture(15040708, Some(DependentType::Receipts)) } fn read_binary_history_fixture( @@ -194,7 +211,7 @@ fn read_binary_history_fixture( dependent: Option, ) -> (HistoryContentKey, HistoryContentValue) { let header_value = std::fs::read(format!( - "test_assets/mainnet/large_content/{block_number}/header_with_proof.bin" + "test_assets/mainnet/large_content/{block_number}/header.bin" )) .unwrap(); let header_content_value: HeaderWithProof = @@ -226,7 +243,7 @@ fn read_binary_history_fixture( } } None => { - let content_key = HistoryContentKey::BlockHeaderByHashWithProof(BlockHeaderByHashKey { + let content_key = HistoryContentKey::BlockHeaderByHash(BlockHeaderByHashKey { block_hash: header_content_value.header.hash().0, }); let content_value = HistoryContentValue::BlockHeaderWithProof(header_content_value); diff --git a/portal-bridge/src/api/execution.rs b/portal-bridge/src/api/execution.rs index 3881047b2..496dc6a34 100644 --- a/portal-bridge/src/api/execution.rs +++ b/portal-bridge/src/api/execution.rs @@ -104,12 +104,12 @@ impl ExecutionApi { }; // Construct header by hash content key / value pair. let header_by_hash_content_key = - HistoryContentKey::BlockHeaderByHashWithProof(BlockHeaderByHashKey { + HistoryContentKey::BlockHeaderByHash(BlockHeaderByHashKey { block_hash: full_header.header.hash().0, }); // Construct header by number content key / value pair. let header_by_number_content_key = - HistoryContentKey::BlockHeaderByNumberWithProof(BlockHeaderByNumberKey { + HistoryContentKey::BlockHeaderByNumber(BlockHeaderByNumberKey { block_number: full_header.header.number, }); let content_value = match &full_header.epoch_acc { diff --git a/portal-bridge/src/bridge/era1.rs b/portal-bridge/src/bridge/era1.rs index 1bc405fec..629bbd009 100644 --- a/portal-bridge/src/bridge/era1.rs +++ b/portal-bridge/src/bridge/era1.rs @@ -153,7 +153,7 @@ impl Era1Bridge { .iter() .map(|hash| { ( - HistoryContentKey::BlockHeaderByHashWithProof(BlockHeaderByHashKey { + HistoryContentKey::BlockHeaderByHash(BlockHeaderByHashKey { block_hash: hash.0, }), HistoryContentKey::BlockBody(BlockBodyKey { block_hash: hash.0 }), @@ -258,13 +258,20 @@ impl Era1Bridge { panic!("Failed to get epoch from era1 file: {e}"); } }; - let epoch_acc = match self.get_epoch_acc(epoch_index).await { + let (_, epoch_acc) = match lookup_epoch_acc( + epoch_index, + &self.header_oracle.header_validator.pre_merge_acc, + &self.epoch_acc_path, + ) + .await + { Ok(epoch_acc) => epoch_acc, Err(e) => { error!("Failed to get epoch acc for epoch: {epoch_index}, error: {e}"); return; } }; + let epoch_acc = Arc::new(epoch_acc); let header_validator = Arc::new(self.header_oracle.header_validator.clone()); info!("Era1 file read successfully, gossiping block tuples for epoch: {epoch_index}"); let mut serve_block_tuple_handles = vec![]; @@ -298,16 +305,6 @@ impl Era1Bridge { join_all(serve_block_tuple_handles).await; } - async fn get_epoch_acc(&self, epoch_index: u64) -> anyhow::Result> { - let (_, epoch_acc) = lookup_epoch_acc( - epoch_index, - &self.header_oracle.header_validator.pre_merge_acc, - &self.epoch_acc_path, - ) - .await?; - Ok(Arc::new(epoch_acc)) - } - fn spawn_serve_block_tuple( portal_client: HttpClient, block_tuple: BlockTuple, @@ -369,8 +366,7 @@ impl Era1Bridge { let header_by_hash_key = BlockHeaderByHashKey { block_hash: header_hash.0, }; - let header_content_key = - HistoryContentKey::BlockHeaderByHashWithProof(header_by_hash_key); + let header_content_key = HistoryContentKey::BlockHeaderByHash(header_by_hash_key); let header_content_info = portal_client .recursive_find_content(header_content_key.clone()) .await; @@ -545,7 +541,7 @@ impl Era1Bridge { let content_value = HistoryContentValue::BlockHeaderWithProof(header_with_proof); // Construct HistoryContentKey for block header by hash and gossip it - let content_key = HistoryContentKey::BlockHeaderByHashWithProof(BlockHeaderByHashKey { + let content_key = HistoryContentKey::BlockHeaderByHash(BlockHeaderByHashKey { block_hash: header.hash().0, }); @@ -558,7 +554,7 @@ impl Era1Bridge { .await?; // Construct HistoryContentKey for block header by number and gossip it - let content_key = HistoryContentKey::BlockHeaderByNumberWithProof(BlockHeaderByNumberKey { + let content_key = HistoryContentKey::BlockHeaderByNumber(BlockHeaderByNumberKey { block_number: header.number, }); diff --git a/portal-bridge/src/bridge/history.rs b/portal-bridge/src/bridge/history.rs index 51dd04af2..da7d46710 100644 --- a/portal-bridge/src/bridge/history.rs +++ b/portal-bridge/src/bridge/history.rs @@ -98,7 +98,7 @@ impl HistoryBridge { block_stats.clone(), ) .await; - if let HistoryContentKey::BlockHeaderByHashWithProof(_) = asset.content_key { + if let HistoryContentKey::BlockHeaderByHash(_) = asset.content_key { sleep(Duration::from_millis(50)).await; } } diff --git a/portal-bridge/src/stats.rs b/portal-bridge/src/stats.rs index 67ac0a6a2..0bd87dfe0 100644 --- a/portal-bridge/src/stats.rs +++ b/portal-bridge/src/stats.rs @@ -120,10 +120,10 @@ impl StatsReporter for HistoryBlockStats { fn update(&mut self, content_key: HistoryContentKey, results: ContentStats) { match content_key { - HistoryContentKey::BlockHeaderByHashWithProof(_) => { + HistoryContentKey::BlockHeaderByHash(_) => { self.header_by_hash_with_proof = Some(results); } - HistoryContentKey::BlockHeaderByNumberWithProof(_) => { + HistoryContentKey::BlockHeaderByNumber(_) => { self.header_by_number_with_proof = Some(results); } HistoryContentKey::BlockBody(_) => { diff --git a/rpc/src/eth_rpc.rs b/rpc/src/eth_rpc.rs index 5ee6abe80..59228839f 100644 --- a/rpc/src/eth_rpc.rs +++ b/rpc/src/eth_rpc.rs @@ -170,9 +170,7 @@ impl EthApi { async fn fetch_header_by_hash(&self, block_hash: B256) -> Result { let content_value = self - .fetch_history_content(HistoryContentKey::BlockHeaderByHashWithProof( - block_hash.into(), - )) + .fetch_history_content(HistoryContentKey::BlockHeaderByHash(block_hash.into())) .await?; let HistoryContentValue::BlockHeaderWithProof(header_with_proof) = content_value else { return Err(RpcServeError::Message(format!( diff --git a/src/bin/poll_latest.rs b/src/bin/poll_latest.rs index 4a94f52b5..811d11da5 100644 --- a/src/bin/poll_latest.rs +++ b/src/bin/poll_latest.rs @@ -136,7 +136,7 @@ async fn audit_block( ) -> Result<()> { metrics.lock().unwrap().active_audit_count += 3; let header_handle = tokio::spawn(audit_content_key( - HistoryContentKey::BlockHeaderByHashWithProof(BlockHeaderByHashKey { block_hash: hash.0 }), + HistoryContentKey::BlockHeaderByHash(BlockHeaderByHashKey { block_hash: hash.0 }), timestamp, timeout, backoff, diff --git a/src/bin/sample_range.rs b/src/bin/sample_range.rs index 8a612111b..97ab285d3 100644 --- a/src/bin/sample_range.rs +++ b/src/bin/sample_range.rs @@ -140,7 +140,7 @@ async fn audit_block( client: HttpClient, ) -> anyhow::Result<()> { let header_ck = - HistoryContentKey::BlockHeaderByHashWithProof(BlockHeaderByHashKey { block_hash: hash.0 }); + HistoryContentKey::BlockHeaderByHash(BlockHeaderByHashKey { block_hash: hash.0 }); let body_ck = HistoryContentKey::BlockBody(BlockBodyKey { block_hash: hash.0 }); let receipts_ck = HistoryContentKey::BlockReceipts(BlockReceiptsKey { block_hash: hash.0 }); match client.recursive_find_content(header_ck).await { diff --git a/test_assets/mainnet/large_content/15040641/body.bin b/test_assets/mainnet/large_content/15040641/body.bin new file mode 100644 index 0000000000000000000000000000000000000000..913e12b5d49601fec7571c7266a2795dc25aa377 GIT binary patch literal 126134 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

7T)VB98Wg%vX$QpvUfCl~BVt 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 literal 0 HcmV?d00001 diff --git a/test_assets/mainnet/large_content/15040641/header.bin b/test_assets/mainnet/large_content/15040641/header.bin new file mode 100644 index 0000000000000000000000000000000000000000..a5b931f73a65cc415391a30027adca364d0e0fb0 GIT binary patch literal 1031 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 literal 0 HcmV?d00001 diff --git a/test_assets/mainnet/large_content/15040708/header_with_proof.bin b/test_assets/mainnet/large_content/15040708/header.bin similarity index 100% rename from test_assets/mainnet/large_content/15040708/header_with_proof.bin rename to test_assets/mainnet/large_content/15040708/header.bin diff --git a/test_assets/mainnet/large_content/15040709/body.bin b/test_assets/mainnet/large_content/15040709/body.bin deleted file mode 100644 index fe847de63940994f8f6b3c07d7826c361fe7f624..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148057 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

O@p2Dt`X<2v75%4~vDfdV4j+7xS<*>K69}n% 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 zjGT7l&<0m}2ZtUok6xML03ZMW00000000000000000000000000000000000Ba6*! diff --git a/test_assets/mainnet/large_content/15040709/receipts.bin b/test_assets/mainnet/large_content/15040709/receipts.bin deleted file mode 100644 index fb1b7f036c06714882cf2eb6108b54362040ef5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95268 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 = "OGFWs179fWnqmjvHQFGHszXloc3Wzdb4".into(); storage.put(content_key.clone(), &value)?; diff --git a/trin-history/src/validation.rs b/trin-history/src/validation.rs index 8c47a4aba..d59028ac3 100644 --- a/trin-history/src/validation.rs +++ b/trin-history/src/validation.rs @@ -1,7 +1,7 @@ use std::sync::Arc; use alloy_primitives::B256; -use anyhow::anyhow; +use anyhow::{anyhow, ensure}; use ssz::Decode; use tokio::sync::RwLock; @@ -29,18 +29,17 @@ impl Validator for ChainHistoryValidator { content: &[u8], ) -> anyhow::Result> { match content_key { - HistoryContentKey::BlockHeaderByHashWithProof(key) => { + HistoryContentKey::BlockHeaderByHash(key) => { let header_with_proof = HeaderWithProof::from_ssz_bytes(content).map_err(|err| { anyhow!("Header with proof content has invalid encoding: {err:?}") })?; let header_hash = header_with_proof.header.hash(); - if header_hash != B256::from(key.block_hash) { - return Err(anyhow!( - "Content validation failed: Invalid header hash. Found: {header_hash:?} - Expected: {:?}", - hex_encode(key.block_hash) - )); - } + ensure!( + header_hash == B256::from(key.block_hash), + "Content validation failed: Invalid header hash. Found: {header_hash:?} - Expected: {:?}", + hex_encode(header_hash) + ); self.header_oracle .read() .await @@ -49,18 +48,17 @@ impl Validator for ChainHistoryValidator { Ok(ValidationResult::new(true)) } - HistoryContentKey::BlockHeaderByNumberWithProof(key) => { + HistoryContentKey::BlockHeaderByNumber(key) => { let header_with_proof = HeaderWithProof::from_ssz_bytes(content).map_err(|err| { anyhow!("Header with proof content has invalid encoding: {err:?}") })?; let header_number = header_with_proof.header.number; - if header_number != key.block_number { - return Err(anyhow!( + ensure!( + header_number == key.block_number, "Content validation failed: Invalid header number. Found: {header_number} - Expected: {}", key.block_number - )); - } + ); self.header_oracle .read() .await @@ -153,7 +151,7 @@ mod tests { let hwp = HeaderWithProof::from_ssz_bytes(&hwp_ssz).expect("error decoding header"); let header_oracle = default_header_oracle(); let chain_history_validator = ChainHistoryValidator { header_oracle }; - let content_key = HistoryContentKey::BlockHeaderByHashWithProof(BlockHeaderByHashKey { + let content_key = HistoryContentKey::BlockHeaderByHash(BlockHeaderByHashKey { block_hash: hwp.header.hash().0, }); chain_history_validator @@ -174,7 +172,7 @@ mod tests { let content_value = header.as_ssz_bytes(); let header_oracle = default_header_oracle(); let chain_history_validator = ChainHistoryValidator { header_oracle }; - let content_key = HistoryContentKey::BlockHeaderByHashWithProof(BlockHeaderByHashKey { + let content_key = HistoryContentKey::BlockHeaderByHash(BlockHeaderByHashKey { block_hash: header.header.hash().0, }); chain_history_validator @@ -196,7 +194,7 @@ mod tests { let content_value = header.as_ssz_bytes(); let header_oracle = default_header_oracle(); let chain_history_validator = ChainHistoryValidator { header_oracle }; - let content_key = HistoryContentKey::BlockHeaderByHashWithProof(BlockHeaderByHashKey { + let content_key = HistoryContentKey::BlockHeaderByHash(BlockHeaderByHashKey { block_hash: header.header.hash().0, }); chain_history_validator diff --git a/trin-state/src/validation/validator.rs b/trin-state/src/validation/validator.rs index bc9a02053..a88ce508c 100644 --- a/trin-state/src/validation/validator.rs +++ b/trin-state/src/validation/validator.rs @@ -186,9 +186,9 @@ mod tests { }); let history_jsonrpc_tx = MockJsonRpcBuilder::new() .with_response( - HistoryEndpoint::RecursiveFindContent( - HistoryContentKey::BlockHeaderByHashWithProof(header.hash().into()), - ), + HistoryEndpoint::RecursiveFindContent(HistoryContentKey::BlockHeaderByHash( + header.hash().into(), + )), ContentInfo::Content { content: history_content_value.encode(), utp_transfer: false, diff --git a/trin-validation/src/oracle.rs b/trin-validation/src/oracle.rs index 2c7fd509d..2328a86b2 100644 --- a/trin-validation/src/oracle.rs +++ b/trin-validation/src/oracle.rs @@ -55,7 +55,7 @@ impl HeaderOracle { &self, block_hash: B256, ) -> anyhow::Result { - let content_key = HistoryContentKey::BlockHeaderByHashWithProof(BlockHeaderByHashKey { + let content_key = HistoryContentKey::BlockHeaderByHash(BlockHeaderByHashKey { block_hash: block_hash.0, }); let endpoint = HistoryEndpoint::RecursiveFindContent(content_key.clone());