diff --git a/crates/cli/commands/src/init_state/without_evm.rs b/crates/cli/commands/src/init_state/without_evm.rs index 8da0bde068..7b2180be45 100644 --- a/crates/cli/commands/src/init_state/without_evm.rs +++ b/crates/cli/commands/src/init_state/without_evm.rs @@ -79,7 +79,7 @@ where + StaticFileProviderFactory>, { provider_rw.insert_block( - SealedBlock::<::Block>::from_sealed_parts( + &SealedBlock::<::Block>::from_sealed_parts( header.clone(), Default::default(), ) diff --git a/crates/era-utils/src/history.rs b/crates/era-utils/src/history.rs index 5fce250aac..c3e58a060e 100644 --- a/crates/era-utils/src/history.rs +++ b/crates/era-utils/src/history.rs @@ -309,7 +309,7 @@ where writer.append_header(&header, &hash)?; // Write bodies to database. - provider.append_block_bodies(vec![(header.number(), Some(body))])?; + provider.append_block_bodies(vec![(header.number(), Some(&body))])?; hash_collector.insert(hash, number)?; } diff --git a/crates/exex/exex/src/manager.rs b/crates/exex/exex/src/manager.rs index 99694f0a51..73e3a1d85f 100644 --- a/crates/exex/exex/src/manager.rs +++ b/crates/exex/exex/src/manager.rs @@ -1303,7 +1303,7 @@ mod tests { .try_recover() .unwrap(); let provider_rw = provider_factory.database_provider_rw().unwrap(); - provider_rw.insert_block(block.clone()).unwrap(); + provider_rw.insert_block(&block).unwrap(); provider_rw.commit().unwrap(); let provider = BlockchainProvider::new(provider_factory).unwrap(); diff --git a/crates/exex/exex/src/notifications.rs b/crates/exex/exex/src/notifications.rs index c6a54e647c..550b3da556 100644 --- a/crates/exex/exex/src/notifications.rs +++ b/crates/exex/exex/src/notifications.rs @@ -481,12 +481,12 @@ mod tests { &mut rng, genesis_block.number + 1, BlockParams { parent: Some(genesis_hash), tx_count: Some(0), ..Default::default() }, - ); - let provider_rw = provider_factory.provider_rw()?; - provider_rw.insert_block(node_head_block.clone().try_recover()?)?; - provider_rw.commit()?; - + ) + .try_recover()?; let node_head = node_head_block.num_hash(); + let provider_rw = provider_factory.provider_rw()?; + provider_rw.insert_block(&node_head_block)?; + provider_rw.commit()?; let exex_head = ExExHead { block: BlockNumHash { number: genesis_block.number, hash: genesis_hash } }; @@ -613,7 +613,7 @@ mod tests { .try_recover()?; let node_head = node_head_block.num_hash(); let provider_rw = provider.database_provider_rw()?; - provider_rw.insert_block(node_head_block)?; + provider_rw.insert_block(&node_head_block)?; provider_rw.commit()?; let node_head_notification = ExExNotification::ChainCommitted { new: Arc::new( diff --git a/crates/net/p2p/src/bodies/response.rs b/crates/net/p2p/src/bodies/response.rs index 772fe6cbbd..2c53a651aa 100644 --- a/crates/net/p2p/src/bodies/response.rs +++ b/crates/net/p2p/src/bodies/response.rs @@ -37,6 +37,14 @@ where Self::Empty(_) => None, } } + + /// Return the reference to the response body + pub const fn body(&self) -> Option<&B::Body> { + match self { + Self::Full(block) => Some(block.body()), + Self::Empty(_) => None, + } + } } impl InMemorySize for BlockResponse { diff --git a/crates/prune/prune/src/segments/mod.rs b/crates/prune/prune/src/segments/mod.rs index 9c8c90daf4..04eaaceed1 100644 --- a/crates/prune/prune/src/segments/mod.rs +++ b/crates/prune/prune/src/segments/mod.rs @@ -235,7 +235,7 @@ mod tests { for block in &blocks { provider_rw .insert_block( - block.clone().try_recover().expect("failed to seal block with senders"), + &block.clone().try_recover().expect("failed to seal block with senders"), ) .expect("failed to insert block"); } @@ -273,7 +273,7 @@ mod tests { for block in &blocks { provider_rw .insert_block( - block.clone().try_recover().expect("failed to seal block with senders"), + &block.clone().try_recover().expect("failed to seal block with senders"), ) .expect("failed to insert block"); } @@ -319,7 +319,7 @@ mod tests { for block in &blocks { provider_rw .insert_block( - block.clone().try_recover().expect("failed to seal block with senders"), + &block.clone().try_recover().expect("failed to seal block with senders"), ) .expect("failed to insert block"); } @@ -355,7 +355,7 @@ mod tests { for block in &blocks { provider_rw .insert_block( - block.clone().try_recover().expect("failed to seal block with senders"), + &block.clone().try_recover().expect("failed to seal block with senders"), ) .expect("failed to insert block"); } diff --git a/crates/stages/stages/src/stages/bodies.rs b/crates/stages/stages/src/stages/bodies.rs index bf1fc9bef9..0d6a4b4fd7 100644 --- a/crates/stages/stages/src/stages/bodies.rs +++ b/crates/stages/stages/src/stages/bodies.rs @@ -202,10 +202,7 @@ where // Write bodies to database. provider.append_block_bodies( - buffer - .into_iter() - .map(|response| (response.block_number(), response.into_body())) - .collect(), + buffer.iter().map(|response| (response.block_number(), response.body())).collect(), )?; // The stage is "done" if: diff --git a/crates/stages/stages/src/stages/execution.rs b/crates/stages/stages/src/stages/execution.rs index f513428498..b4931faa9e 100644 --- a/crates/stages/stages/src/stages/execution.rs +++ b/crates/stages/stages/src/stages/execution.rs @@ -748,8 +748,8 @@ mod tests { let genesis = SealedBlock::::decode(&mut genesis_rlp).unwrap(); let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice(); let block = SealedBlock::::decode(&mut block_rlp).unwrap(); - provider.insert_block(genesis.try_recover().unwrap()).unwrap(); - provider.insert_block(block.clone().try_recover().unwrap()).unwrap(); + provider.insert_block(&genesis.try_recover().unwrap()).unwrap(); + provider.insert_block(&block.clone().try_recover().unwrap()).unwrap(); provider .static_file_provider() .latest_writer(StaticFileSegment::Headers) @@ -789,8 +789,8 @@ mod tests { let genesis = SealedBlock::::decode(&mut genesis_rlp).unwrap(); let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice(); let block = SealedBlock::::decode(&mut block_rlp).unwrap(); - provider.insert_block(genesis.try_recover().unwrap()).unwrap(); - provider.insert_block(block.clone().try_recover().unwrap()).unwrap(); + provider.insert_block(&genesis.try_recover().unwrap()).unwrap(); + provider.insert_block(&block.clone().try_recover().unwrap()).unwrap(); provider .static_file_provider() .latest_writer(StaticFileSegment::Headers) @@ -830,8 +830,8 @@ mod tests { let genesis = SealedBlock::::decode(&mut genesis_rlp).unwrap(); let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice(); let block = SealedBlock::::decode(&mut block_rlp).unwrap(); - provider.insert_block(genesis.try_recover().unwrap()).unwrap(); - provider.insert_block(block.clone().try_recover().unwrap()).unwrap(); + provider.insert_block(&genesis.try_recover().unwrap()).unwrap(); + provider.insert_block(&block.clone().try_recover().unwrap()).unwrap(); provider .static_file_provider() .latest_writer(StaticFileSegment::Headers) @@ -863,8 +863,8 @@ mod tests { let genesis = SealedBlock::::decode(&mut genesis_rlp).unwrap(); let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice(); let block = SealedBlock::::decode(&mut block_rlp).unwrap(); - provider.insert_block(genesis.try_recover().unwrap()).unwrap(); - provider.insert_block(block.clone().try_recover().unwrap()).unwrap(); + provider.insert_block(&genesis.try_recover().unwrap()).unwrap(); + provider.insert_block(&block.clone().try_recover().unwrap()).unwrap(); provider .static_file_provider() .latest_writer(StaticFileSegment::Headers) @@ -1005,8 +1005,8 @@ mod tests { let genesis = SealedBlock::::decode(&mut genesis_rlp).unwrap(); let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice(); let block = SealedBlock::::decode(&mut block_rlp).unwrap(); - provider.insert_block(genesis.try_recover().unwrap()).unwrap(); - provider.insert_block(block.clone().try_recover().unwrap()).unwrap(); + provider.insert_block(&genesis.try_recover().unwrap()).unwrap(); + provider.insert_block(&block.clone().try_recover().unwrap()).unwrap(); provider .static_file_provider() .latest_writer(StaticFileSegment::Headers) @@ -1115,8 +1115,8 @@ mod tests { let genesis = SealedBlock::::decode(&mut genesis_rlp).unwrap(); let mut block_rlp = hex!("f9025ff901f7a0c86e8cc0310ae7c531c758678ddbfd16fc51c8cef8cec650b032de9869e8b94fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa050554882fbbda2c2fd93fdc466db9946ea262a67f7a76cc169e714f105ab583da00967f09ef1dfed20c0eacfaa94d5cd4002eda3242ac47eae68972d07b106d192a0e3c8b47fbfc94667ef4cceb17e5cc21e3b1eebd442cebb27f07562b33836290db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001830f42408238108203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a83061a8094095e7baea6a6c7c4c2dfeb977efac326af552d8780801ba072ed817487b84ba367d15d2f039b5fc5f087d0a8882fbdf73e8cb49357e1ce30a0403d800545b8fc544f92ce8124e2255f8c3c6af93f28243a120585d4c4c6a2a3c0").as_slice(); let block = SealedBlock::::decode(&mut block_rlp).unwrap(); - provider.insert_block(genesis.try_recover().unwrap()).unwrap(); - provider.insert_block(block.clone().try_recover().unwrap()).unwrap(); + provider.insert_block(&genesis.try_recover().unwrap()).unwrap(); + provider.insert_block(&block.clone().try_recover().unwrap()).unwrap(); provider .static_file_provider() .latest_writer(StaticFileSegment::Headers) @@ -1265,13 +1265,15 @@ mod tests { let provider_rw = factory.database_provider_rw().unwrap(); let mut rng = generators::rng(); let genesis = generators::random_block(&mut rng, 0, Default::default()); - provider_rw.insert_block(genesis.try_recover().unwrap()).expect("failed to insert genesis"); + provider_rw + .insert_block(&genesis.try_recover().unwrap()) + .expect("failed to insert genesis"); let block = generators::random_block( &mut rng, 1, generators::BlockParams { tx_count: Some(2), ..Default::default() }, ); - provider_rw.insert_block(block.try_recover().unwrap()).expect("failed to insert block"); + provider_rw.insert_block(&block.try_recover().unwrap()).expect("failed to insert block"); let static_file_provider = provider_rw.static_file_provider(); static_file_provider.latest_writer(StaticFileSegment::Headers).unwrap().commit().unwrap(); diff --git a/crates/stages/stages/src/stages/hashing_account.rs b/crates/stages/stages/src/stages/hashing_account.rs index 1e48f2d38e..d9e5c9e2c3 100644 --- a/crates/stages/stages/src/stages/hashing_account.rs +++ b/crates/stages/stages/src/stages/hashing_account.rs @@ -86,7 +86,7 @@ impl AccountHashingStage { ); for block in blocks { - provider.insert_block(block.try_recover().unwrap()).unwrap(); + provider.insert_block(&block.try_recover().unwrap()).unwrap(); } provider .static_file_provider() diff --git a/crates/stages/stages/src/stages/mod.rs b/crates/stages/stages/src/stages/mod.rs index 4434f153c8..d6747a3960 100644 --- a/crates/stages/stages/src/stages/mod.rs +++ b/crates/stages/stages/src/stages/mod.rs @@ -96,11 +96,11 @@ mod tests { let genesis = SealedBlock::::decode(&mut genesis_rlp).unwrap(); let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice(); let block = SealedBlock::::decode(&mut block_rlp).unwrap(); - provider_rw.insert_block(genesis.try_recover().unwrap()).unwrap(); - provider_rw.insert_block(block.clone().try_recover().unwrap()).unwrap(); + let mut head = block.hash(); + provider_rw.insert_block(&genesis.try_recover().unwrap()).unwrap(); + provider_rw.insert_block(&block.try_recover().unwrap()).unwrap(); // Fill with bogus blocks to respect PruneMode distance. - let mut head = block.hash(); let mut rng = generators::rng(); for block_number in 2..=tip { let nblock = random_block( @@ -109,7 +109,7 @@ mod tests { generators::BlockParams { parent: Some(head), ..Default::default() }, ); head = nblock.hash(); - provider_rw.insert_block(nblock.try_recover().unwrap()).unwrap(); + provider_rw.insert_block(&nblock.try_recover().unwrap()).unwrap(); } provider_rw .static_file_provider() diff --git a/crates/storage/provider/src/providers/blockchain_provider.rs b/crates/storage/provider/src/providers/blockchain_provider.rs index 44ae667f50..65946537b3 100644 --- a/crates/storage/provider/src/providers/blockchain_provider.rs +++ b/crates/storage/provider/src/providers/blockchain_provider.rs @@ -875,7 +875,7 @@ mod tests { // Insert blocks into the database for block in &database_blocks { provider_rw.insert_block( - block.clone().try_recover().expect("failed to seal block with senders"), + &block.clone().try_recover().expect("failed to seal block with senders"), )?; } @@ -1005,9 +1005,10 @@ mod tests { let provider_rw = factory.provider_rw()?; for block in database_blocks { provider_rw.insert_block( - block.clone().try_recover().expect("failed to seal block with senders"), + &block.clone().try_recover().expect("failed to seal block with senders"), )?; } + provider_rw.commit()?; // Create a new provider @@ -1103,7 +1104,7 @@ mod tests { let provider_rw = factory.provider_rw()?; for block in database_blocks { provider_rw.insert_block( - block.clone().try_recover().expect("failed to seal block with senders"), + &block.clone().try_recover().expect("failed to seal block with senders"), )?; } provider_rw.commit()?; @@ -1320,7 +1321,7 @@ mod tests { // Insert and commit the block. let provider_rw = factory.provider_rw()?; - provider_rw.insert_block(block_1)?; + provider_rw.insert_block(&block_1)?; provider_rw.commit()?; let provider = BlockchainProvider::new(factory)?; diff --git a/crates/storage/provider/src/providers/consistent.rs b/crates/storage/provider/src/providers/consistent.rs index 254e1e1414..fe859c01b0 100644 --- a/crates/storage/provider/src/providers/consistent.rs +++ b/crates/storage/provider/src/providers/consistent.rs @@ -1566,7 +1566,7 @@ mod tests { let provider_rw = factory.provider_rw()?; for block in database_blocks { provider_rw.insert_block( - block.clone().try_recover().expect("failed to seal block with senders"), + &block.clone().try_recover().expect("failed to seal block with senders"), )?; } provider_rw.commit()?; @@ -1677,7 +1677,7 @@ mod tests { let provider_rw = factory.provider_rw()?; for block in database_blocks { provider_rw.insert_block( - block.clone().try_recover().expect("failed to seal block with senders"), + &block.clone().try_recover().expect("failed to seal block with senders"), )?; } provider_rw.commit()?; diff --git a/crates/storage/provider/src/providers/consistent_view.rs b/crates/storage/provider/src/providers/consistent_view.rs index d8404af541..653b3659cb 100644 --- a/crates/storage/provider/src/providers/consistent_view.rs +++ b/crates/storage/provider/src/providers/consistent_view.rs @@ -103,7 +103,7 @@ mod tests { // insert the block let provider_rw = provider_factory.provider_rw().unwrap(); - provider_rw.insert_block(genesis_block).unwrap(); + provider_rw.insert_block(&genesis_block).unwrap(); provider_rw.commit().unwrap(); // create a consistent view provider and check that a ro provider can be made @@ -121,7 +121,7 @@ mod tests { // insert the block let provider_rw = provider_factory.provider_rw().unwrap(); - provider_rw.insert_block(recovered_block).unwrap(); + provider_rw.insert_block(&recovered_block).unwrap(); provider_rw.commit().unwrap(); // ensure successful creation of a read-only provider, based on this new db state. @@ -136,7 +136,7 @@ mod tests { // insert the block let provider_rw = provider_factory.provider_rw().unwrap(); - provider_rw.insert_block(recovered_block).unwrap(); + provider_rw.insert_block(&recovered_block).unwrap(); provider_rw.commit().unwrap(); // check that creation of a read-only provider still works @@ -156,7 +156,7 @@ mod tests { // insert the block let provider_rw = provider_factory.provider_rw().unwrap(); - provider_rw.insert_block(genesis_block).unwrap(); + provider_rw.insert_block(&genesis_block).unwrap(); provider_rw.commit().unwrap(); // create a consistent view provider and check that a ro provider can be made @@ -174,7 +174,7 @@ mod tests { // insert the block let provider_rw = provider_factory.provider_rw().unwrap(); - provider_rw.insert_block(recovered_block).unwrap(); + provider_rw.insert_block(&recovered_block).unwrap(); provider_rw.commit().unwrap(); // create a second consistent view provider and check that a ro provider can be made @@ -208,7 +208,7 @@ mod tests { // reinsert the block at the same height, but with a different hash let provider_rw = provider_factory.provider_rw().unwrap(); - provider_rw.insert_block(recovered_block).unwrap(); + provider_rw.insert_block(&recovered_block).unwrap(); provider_rw.commit().unwrap(); // ensure unsuccessful creation of a read-only provider, based on this new db state. diff --git a/crates/storage/provider/src/providers/database/mod.rs b/crates/storage/provider/src/providers/database/mod.rs index 64323d65e9..d76da72fd6 100644 --- a/crates/storage/provider/src/providers/database/mod.rs +++ b/crates/storage/provider/src/providers/database/mod.rs @@ -726,7 +726,7 @@ mod tests { { let factory = create_test_provider_factory(); let provider = factory.provider_rw().unwrap(); - assert_matches!(provider.insert_block(block.clone().try_recover().unwrap()), Ok(_)); + assert_matches!(provider.insert_block(&block.clone().try_recover().unwrap()), Ok(_)); assert_matches!( provider.transaction_sender(0), Ok(Some(sender)) if sender == block.body().transactions[0].recover_signer().unwrap() @@ -745,7 +745,7 @@ mod tests { }; let factory = create_test_provider_factory(); let provider = factory.with_prune_modes(prune_modes).provider_rw().unwrap(); - assert_matches!(provider.insert_block(block.clone().try_recover().unwrap()), Ok(_)); + assert_matches!(provider.insert_block(&block.clone().try_recover().unwrap()), Ok(_)); assert_matches!(provider.transaction_sender(0), Ok(None)); assert_matches!( provider.transaction_id(*block.body().transactions[0].tx_hash()), @@ -765,7 +765,7 @@ mod tests { let factory = create_test_provider_factory(); let provider = factory.provider_rw().unwrap(); - assert_matches!(provider.insert_block(block.clone().try_recover().unwrap()), Ok(_)); + assert_matches!(provider.insert_block(&block.clone().try_recover().unwrap()), Ok(_)); let senders = provider.take::(range.clone()); assert_eq!( diff --git a/crates/storage/provider/src/providers/database/provider.rs b/crates/storage/provider/src/providers/database/provider.rs index 0b6dfe08df..9b4b68a606 100644 --- a/crates/storage/provider/src/providers/database/provider.rs +++ b/crates/storage/provider/src/providers/database/provider.rs @@ -356,7 +356,7 @@ impl DatabaseProvider BlockWrite /// [`TransactionHashNumbers`](tables::TransactionHashNumbers). fn insert_block( &self, - block: RecoveredBlock, + block: &RecoveredBlock, ) -> ProviderResult { let block_number = block.number(); let tx_count = block.body().transaction_count() as u64; @@ -2915,7 +2915,7 @@ impl BlockWrite durations_recorder.record_relative(metrics::Action::InsertTransactionHashNumbers); } - self.append_block_bodies(vec![(block_number, Some(block.into_body()))])?; + self.append_block_bodies(vec![(block_number, Some(block.body()))])?; debug!( target: "providers::db", @@ -2929,7 +2929,7 @@ impl BlockWrite fn append_block_bodies( &self, - bodies: Vec<(BlockNumber, Option>)>, + bodies: Vec<(BlockNumber, Option<&BodyTy>)>, ) -> ProviderResult<()> { let Some(from_block) = bodies.first().map(|(block, _)| *block) else { return Ok(()) }; @@ -3081,7 +3081,7 @@ impl BlockWrite // Insert the blocks for block in blocks { - self.insert_block(block)?; + self.insert_block(&block)?; durations_recorder.record_relative(metrics::Action::InsertBlock); } @@ -3302,14 +3302,14 @@ mod tests { let data = BlockchainTestData::default(); let provider_rw = factory.provider_rw().unwrap(); - provider_rw.insert_block(data.genesis.clone().try_recover().unwrap()).unwrap(); + provider_rw.insert_block(&data.genesis.clone().try_recover().unwrap()).unwrap(); provider_rw .write_state( &ExecutionOutcome { first_block: 0, receipts: vec![vec![]], ..Default::default() }, crate::OriginalValuesKnown::No, ) .unwrap(); - provider_rw.insert_block(data.blocks[0].0.clone()).unwrap(); + provider_rw.insert_block(&data.blocks[0].0).unwrap(); provider_rw.write_state(&data.blocks[0].1, crate::OriginalValuesKnown::No).unwrap(); provider_rw.commit().unwrap(); @@ -3328,7 +3328,7 @@ mod tests { let data = BlockchainTestData::default(); let provider_rw = factory.provider_rw().unwrap(); - provider_rw.insert_block(data.genesis.clone().try_recover().unwrap()).unwrap(); + provider_rw.insert_block(&data.genesis.clone().try_recover().unwrap()).unwrap(); provider_rw .write_state( &ExecutionOutcome { first_block: 0, receipts: vec![vec![]], ..Default::default() }, @@ -3336,7 +3336,7 @@ mod tests { ) .unwrap(); for i in 0..3 { - provider_rw.insert_block(data.blocks[i].0.clone()).unwrap(); + provider_rw.insert_block(&data.blocks[i].0).unwrap(); provider_rw.write_state(&data.blocks[i].1, crate::OriginalValuesKnown::No).unwrap(); } provider_rw.commit().unwrap(); @@ -3358,7 +3358,7 @@ mod tests { let data = BlockchainTestData::default(); let provider_rw = factory.provider_rw().unwrap(); - provider_rw.insert_block(data.genesis.clone().try_recover().unwrap()).unwrap(); + provider_rw.insert_block(&data.genesis.clone().try_recover().unwrap()).unwrap(); provider_rw .write_state( &ExecutionOutcome { first_block: 0, receipts: vec![vec![]], ..Default::default() }, @@ -3368,7 +3368,7 @@ mod tests { // insert blocks 1-3 with receipts for i in 0..3 { - provider_rw.insert_block(data.blocks[i].0.clone()).unwrap(); + provider_rw.insert_block(&data.blocks[i].0).unwrap(); provider_rw.write_state(&data.blocks[i].1, crate::OriginalValuesKnown::No).unwrap(); } provider_rw.commit().unwrap(); @@ -3389,7 +3389,7 @@ mod tests { let data = BlockchainTestData::default(); let provider_rw = factory.provider_rw().unwrap(); - provider_rw.insert_block(data.genesis.clone().try_recover().unwrap()).unwrap(); + provider_rw.insert_block(&data.genesis.clone().try_recover().unwrap()).unwrap(); provider_rw .write_state( &ExecutionOutcome { first_block: 0, receipts: vec![vec![]], ..Default::default() }, @@ -3397,7 +3397,7 @@ mod tests { ) .unwrap(); for i in 0..3 { - provider_rw.insert_block(data.blocks[i].0.clone()).unwrap(); + provider_rw.insert_block(&data.blocks[i].0).unwrap(); provider_rw.write_state(&data.blocks[i].1, crate::OriginalValuesKnown::No).unwrap(); } provider_rw.commit().unwrap(); @@ -3433,7 +3433,7 @@ mod tests { let provider_rw = factory.provider_rw().unwrap(); for block in blocks { - provider_rw.insert_block(block.try_recover().unwrap()).unwrap(); + provider_rw.insert_block(&block.try_recover().unwrap()).unwrap(); } provider_rw.commit().unwrap(); @@ -3452,7 +3452,7 @@ mod tests { let data = BlockchainTestData::default(); let provider_rw = factory.provider_rw().unwrap(); - provider_rw.insert_block(data.genesis.clone().try_recover().unwrap()).unwrap(); + provider_rw.insert_block(&data.genesis.clone().try_recover().unwrap()).unwrap(); provider_rw .write_state( &ExecutionOutcome { first_block: 0, receipts: vec![vec![]], ..Default::default() }, @@ -3460,7 +3460,7 @@ mod tests { ) .unwrap(); for i in 0..3 { - provider_rw.insert_block(data.blocks[i].0.clone()).unwrap(); + provider_rw.insert_block(&data.blocks[i].0).unwrap(); provider_rw.write_state(&data.blocks[i].1, crate::OriginalValuesKnown::No).unwrap(); } provider_rw.commit().unwrap(); @@ -4760,7 +4760,7 @@ mod tests { block_num, BlockParams { tx_count: Some(tx_count), ..Default::default() }, ); - provider_rw.insert_block(block.try_recover().unwrap()).unwrap(); + provider_rw.insert_block(&block.try_recover().unwrap()).unwrap(); } }; diff --git a/crates/storage/provider/src/providers/rocksdb/invariants.rs b/crates/storage/provider/src/providers/rocksdb/invariants.rs index 1d3aeb5759..5e420f3b19 100644 --- a/crates/storage/provider/src/providers/rocksdb/invariants.rs +++ b/crates/storage/provider/src/providers/rocksdb/invariants.rs @@ -463,7 +463,9 @@ mod tests { let provider = factory.database_provider_rw().unwrap(); let mut tx_count = 0u64; for block in &blocks { - provider.insert_block(block.clone().try_recover().expect("recover block")).unwrap(); + provider + .insert_block(&block.clone().try_recover().expect("recover block")) + .unwrap(); for tx in &block.body().transactions { let hash = tx.trie_hash(); tx_hashes.push(hash); @@ -603,7 +605,9 @@ mod tests { let provider = factory.database_provider_rw().unwrap(); let mut tx_count = 0u64; for block in &blocks { - provider.insert_block(block.clone().try_recover().expect("recover block")).unwrap(); + provider + .insert_block(&block.clone().try_recover().expect("recover block")) + .unwrap(); for tx in &block.body().transactions { let hash = tx.trie_hash(); rocksdb.put::(hash, &tx_count).unwrap(); @@ -667,7 +671,9 @@ mod tests { let provider = factory.database_provider_rw().unwrap(); // Insert ALL blocks (0-5) to write transactions to static files for block in &blocks { - provider.insert_block(block.clone().try_recover().expect("recover block")).unwrap(); + provider + .insert_block(&block.clone().try_recover().expect("recover block")) + .unwrap(); for tx in &block.body().transactions { let hash = tx.trie_hash(); tx_hashes.push(hash); @@ -831,7 +837,9 @@ mod tests { let provider = factory.database_provider_rw().unwrap(); for block in &blocks { - provider.insert_block(block.clone().try_recover().expect("recover block")).unwrap(); + provider + .insert_block(&block.clone().try_recover().expect("recover block")) + .unwrap(); // Store transaction hash -> tx_number mappings in RocksDB for tx in &block.body().transactions { diff --git a/crates/storage/storage-api/src/block_writer.rs b/crates/storage/storage-api/src/block_writer.rs index 06e11687c4..233e9898d1 100644 --- a/crates/storage/storage-api/src/block_writer.rs +++ b/crates/storage/storage-api/src/block_writer.rs @@ -53,7 +53,7 @@ pub trait BlockWriter { /// and transition in the block. fn insert_block( &self, - block: RecoveredBlock, + block: &RecoveredBlock, ) -> ProviderResult; /// Appends a batch of block bodies extending the canonical chain. This is invoked during @@ -63,7 +63,7 @@ pub trait BlockWriter { /// Bodies are passed as [`Option`]s, if body is `None` the corresponding block is empty. fn append_block_bodies( &self, - bodies: Vec<(BlockNumber, Option<::Body>)>, + bodies: Vec<(BlockNumber, Option<&::Body>)>, ) -> ProviderResult<()>; /// Removes all blocks above the given block number from the database. diff --git a/crates/storage/storage-api/src/chain.rs b/crates/storage/storage-api/src/chain.rs index 5b159715ad..40a8c975f9 100644 --- a/crates/storage/storage-api/src/chain.rs +++ b/crates/storage/storage-api/src/chain.rs @@ -28,7 +28,7 @@ pub trait BlockBodyWriter { fn write_block_bodies( &self, provider: &Provider, - bodies: Vec<(BlockNumber, Option)>, + bodies: Vec<(BlockNumber, Option<&Body>)>, ) -> ProviderResult<()>; /// Removes all block bodies above the given block number from the database. @@ -102,7 +102,7 @@ where fn write_block_bodies( &self, provider: &Provider, - bodies: Vec<(u64, Option>)>, + bodies: Vec<(u64, Option<&alloy_consensus::BlockBody>)>, ) -> ProviderResult<()> { let mut ommers_cursor = provider.tx_ref().cursor_write::>()?; let mut withdrawals_cursor = @@ -113,11 +113,12 @@ where // Write ommers if any if !body.ommers.is_empty() { - ommers_cursor.append(block_number, &StoredBlockOmmers { ommers: body.ommers })?; + ommers_cursor + .append(block_number, &StoredBlockOmmers { ommers: body.ommers.clone() })?; } // Write withdrawals if any - if let Some(withdrawals) = body.withdrawals && + if let Some(withdrawals) = body.withdrawals.clone() && !withdrawals.is_empty() { withdrawals_cursor.append(block_number, &StoredBlockWithdrawals { withdrawals })?; @@ -212,7 +213,7 @@ where fn write_block_bodies( &self, _provider: &Provider, - _bodies: Vec<(u64, Option>)>, + _bodies: Vec<(u64, Option<&alloy_consensus::BlockBody>)>, ) -> ProviderResult<()> { // noop Ok(()) diff --git a/testing/ef-tests/src/cases/blockchain_test.rs b/testing/ef-tests/src/cases/blockchain_test.rs index aa53d5f44d..1ecbe9a3b1 100644 --- a/testing/ef-tests/src/cases/blockchain_test.rs +++ b/testing/ef-tests/src/cases/blockchain_test.rs @@ -218,7 +218,7 @@ fn run_case( .unwrap(); provider - .insert_block(genesis_block.clone()) + .insert_block(&genesis_block) .map_err(|err| Error::block_failed(0, Default::default(), err))?; // Increment block number for receipts static file @@ -249,7 +249,7 @@ fn run_case( // Insert the block into the database provider - .insert_block(block.clone()) + .insert_block(block) .map_err(|err| Error::block_failed(block_number, Default::default(), err))?; // Commit static files, so we can query the headers for stateless execution below provider