feat(storage): make insert_block() operate with references (#20504)

Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
fig
2025-12-22 15:13:43 +00:00
committed by GitHub
parent ed7a5696b7
commit 96c77fd8b2
19 changed files with 98 additions and 81 deletions

View File

@@ -79,7 +79,7 @@ where
+ StaticFileProviderFactory<Primitives: NodePrimitives<BlockHeader: Compact>>, + StaticFileProviderFactory<Primitives: NodePrimitives<BlockHeader: Compact>>,
{ {
provider_rw.insert_block( provider_rw.insert_block(
SealedBlock::<<Provider::Primitives as NodePrimitives>::Block>::from_sealed_parts( &SealedBlock::<<Provider::Primitives as NodePrimitives>::Block>::from_sealed_parts(
header.clone(), header.clone(),
Default::default(), Default::default(),
) )

View File

@@ -309,7 +309,7 @@ where
writer.append_header(&header, &hash)?; writer.append_header(&header, &hash)?;
// Write bodies to database. // 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)?; hash_collector.insert(hash, number)?;
} }

View File

@@ -1303,7 +1303,7 @@ mod tests {
.try_recover() .try_recover()
.unwrap(); .unwrap();
let provider_rw = provider_factory.database_provider_rw().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(); provider_rw.commit().unwrap();
let provider = BlockchainProvider::new(provider_factory).unwrap(); let provider = BlockchainProvider::new(provider_factory).unwrap();

View File

@@ -481,12 +481,12 @@ mod tests {
&mut rng, &mut rng,
genesis_block.number + 1, genesis_block.number + 1,
BlockParams { parent: Some(genesis_hash), tx_count: Some(0), ..Default::default() }, BlockParams { parent: Some(genesis_hash), tx_count: Some(0), ..Default::default() },
); )
let provider_rw = provider_factory.provider_rw()?; .try_recover()?;
provider_rw.insert_block(node_head_block.clone().try_recover()?)?;
provider_rw.commit()?;
let node_head = node_head_block.num_hash(); 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 = let exex_head =
ExExHead { block: BlockNumHash { number: genesis_block.number, hash: genesis_hash } }; ExExHead { block: BlockNumHash { number: genesis_block.number, hash: genesis_hash } };
@@ -613,7 +613,7 @@ mod tests {
.try_recover()?; .try_recover()?;
let node_head = node_head_block.num_hash(); let node_head = node_head_block.num_hash();
let provider_rw = provider.database_provider_rw()?; let provider_rw = provider.database_provider_rw()?;
provider_rw.insert_block(node_head_block)?; provider_rw.insert_block(&node_head_block)?;
provider_rw.commit()?; provider_rw.commit()?;
let node_head_notification = ExExNotification::ChainCommitted { let node_head_notification = ExExNotification::ChainCommitted {
new: Arc::new( new: Arc::new(

View File

@@ -37,6 +37,14 @@ where
Self::Empty(_) => None, 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<B: Block> InMemorySize for BlockResponse<B> { impl<B: Block> InMemorySize for BlockResponse<B> {

View File

@@ -235,7 +235,7 @@ mod tests {
for block in &blocks { for block in &blocks {
provider_rw provider_rw
.insert_block( .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"); .expect("failed to insert block");
} }
@@ -273,7 +273,7 @@ mod tests {
for block in &blocks { for block in &blocks {
provider_rw provider_rw
.insert_block( .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"); .expect("failed to insert block");
} }
@@ -319,7 +319,7 @@ mod tests {
for block in &blocks { for block in &blocks {
provider_rw provider_rw
.insert_block( .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"); .expect("failed to insert block");
} }
@@ -355,7 +355,7 @@ mod tests {
for block in &blocks { for block in &blocks {
provider_rw provider_rw
.insert_block( .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"); .expect("failed to insert block");
} }

View File

@@ -202,10 +202,7 @@ where
// Write bodies to database. // Write bodies to database.
provider.append_block_bodies( provider.append_block_bodies(
buffer buffer.iter().map(|response| (response.block_number(), response.body())).collect(),
.into_iter()
.map(|response| (response.block_number(), response.into_body()))
.collect(),
)?; )?;
// The stage is "done" if: // The stage is "done" if:

View File

@@ -748,8 +748,8 @@ mod tests {
let genesis = SealedBlock::<Block>::decode(&mut genesis_rlp).unwrap(); let genesis = SealedBlock::<Block>::decode(&mut genesis_rlp).unwrap();
let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice(); let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice();
let block = SealedBlock::<Block>::decode(&mut block_rlp).unwrap(); let block = SealedBlock::<Block>::decode(&mut block_rlp).unwrap();
provider.insert_block(genesis.try_recover().unwrap()).unwrap(); provider.insert_block(&genesis.try_recover().unwrap()).unwrap();
provider.insert_block(block.clone().try_recover().unwrap()).unwrap(); provider.insert_block(&block.clone().try_recover().unwrap()).unwrap();
provider provider
.static_file_provider() .static_file_provider()
.latest_writer(StaticFileSegment::Headers) .latest_writer(StaticFileSegment::Headers)
@@ -789,8 +789,8 @@ mod tests {
let genesis = SealedBlock::<Block>::decode(&mut genesis_rlp).unwrap(); let genesis = SealedBlock::<Block>::decode(&mut genesis_rlp).unwrap();
let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice(); let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice();
let block = SealedBlock::<Block>::decode(&mut block_rlp).unwrap(); let block = SealedBlock::<Block>::decode(&mut block_rlp).unwrap();
provider.insert_block(genesis.try_recover().unwrap()).unwrap(); provider.insert_block(&genesis.try_recover().unwrap()).unwrap();
provider.insert_block(block.clone().try_recover().unwrap()).unwrap(); provider.insert_block(&block.clone().try_recover().unwrap()).unwrap();
provider provider
.static_file_provider() .static_file_provider()
.latest_writer(StaticFileSegment::Headers) .latest_writer(StaticFileSegment::Headers)
@@ -830,8 +830,8 @@ mod tests {
let genesis = SealedBlock::<Block>::decode(&mut genesis_rlp).unwrap(); let genesis = SealedBlock::<Block>::decode(&mut genesis_rlp).unwrap();
let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice(); let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice();
let block = SealedBlock::<Block>::decode(&mut block_rlp).unwrap(); let block = SealedBlock::<Block>::decode(&mut block_rlp).unwrap();
provider.insert_block(genesis.try_recover().unwrap()).unwrap(); provider.insert_block(&genesis.try_recover().unwrap()).unwrap();
provider.insert_block(block.clone().try_recover().unwrap()).unwrap(); provider.insert_block(&block.clone().try_recover().unwrap()).unwrap();
provider provider
.static_file_provider() .static_file_provider()
.latest_writer(StaticFileSegment::Headers) .latest_writer(StaticFileSegment::Headers)
@@ -863,8 +863,8 @@ mod tests {
let genesis = SealedBlock::<Block>::decode(&mut genesis_rlp).unwrap(); let genesis = SealedBlock::<Block>::decode(&mut genesis_rlp).unwrap();
let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice(); let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice();
let block = SealedBlock::<Block>::decode(&mut block_rlp).unwrap(); let block = SealedBlock::<Block>::decode(&mut block_rlp).unwrap();
provider.insert_block(genesis.try_recover().unwrap()).unwrap(); provider.insert_block(&genesis.try_recover().unwrap()).unwrap();
provider.insert_block(block.clone().try_recover().unwrap()).unwrap(); provider.insert_block(&block.clone().try_recover().unwrap()).unwrap();
provider provider
.static_file_provider() .static_file_provider()
.latest_writer(StaticFileSegment::Headers) .latest_writer(StaticFileSegment::Headers)
@@ -1005,8 +1005,8 @@ mod tests {
let genesis = SealedBlock::<Block>::decode(&mut genesis_rlp).unwrap(); let genesis = SealedBlock::<Block>::decode(&mut genesis_rlp).unwrap();
let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice(); let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice();
let block = SealedBlock::<Block>::decode(&mut block_rlp).unwrap(); let block = SealedBlock::<Block>::decode(&mut block_rlp).unwrap();
provider.insert_block(genesis.try_recover().unwrap()).unwrap(); provider.insert_block(&genesis.try_recover().unwrap()).unwrap();
provider.insert_block(block.clone().try_recover().unwrap()).unwrap(); provider.insert_block(&block.clone().try_recover().unwrap()).unwrap();
provider provider
.static_file_provider() .static_file_provider()
.latest_writer(StaticFileSegment::Headers) .latest_writer(StaticFileSegment::Headers)
@@ -1115,8 +1115,8 @@ mod tests {
let genesis = SealedBlock::<Block>::decode(&mut genesis_rlp).unwrap(); let genesis = SealedBlock::<Block>::decode(&mut genesis_rlp).unwrap();
let mut block_rlp = hex!("f9025ff901f7a0c86e8cc0310ae7c531c758678ddbfd16fc51c8cef8cec650b032de9869e8b94fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa050554882fbbda2c2fd93fdc466db9946ea262a67f7a76cc169e714f105ab583da00967f09ef1dfed20c0eacfaa94d5cd4002eda3242ac47eae68972d07b106d192a0e3c8b47fbfc94667ef4cceb17e5cc21e3b1eebd442cebb27f07562b33836290db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001830f42408238108203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a83061a8094095e7baea6a6c7c4c2dfeb977efac326af552d8780801ba072ed817487b84ba367d15d2f039b5fc5f087d0a8882fbdf73e8cb49357e1ce30a0403d800545b8fc544f92ce8124e2255f8c3c6af93f28243a120585d4c4c6a2a3c0").as_slice(); let mut block_rlp = hex!("f9025ff901f7a0c86e8cc0310ae7c531c758678ddbfd16fc51c8cef8cec650b032de9869e8b94fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa050554882fbbda2c2fd93fdc466db9946ea262a67f7a76cc169e714f105ab583da00967f09ef1dfed20c0eacfaa94d5cd4002eda3242ac47eae68972d07b106d192a0e3c8b47fbfc94667ef4cceb17e5cc21e3b1eebd442cebb27f07562b33836290db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001830f42408238108203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a83061a8094095e7baea6a6c7c4c2dfeb977efac326af552d8780801ba072ed817487b84ba367d15d2f039b5fc5f087d0a8882fbdf73e8cb49357e1ce30a0403d800545b8fc544f92ce8124e2255f8c3c6af93f28243a120585d4c4c6a2a3c0").as_slice();
let block = SealedBlock::<Block>::decode(&mut block_rlp).unwrap(); let block = SealedBlock::<Block>::decode(&mut block_rlp).unwrap();
provider.insert_block(genesis.try_recover().unwrap()).unwrap(); provider.insert_block(&genesis.try_recover().unwrap()).unwrap();
provider.insert_block(block.clone().try_recover().unwrap()).unwrap(); provider.insert_block(&block.clone().try_recover().unwrap()).unwrap();
provider provider
.static_file_provider() .static_file_provider()
.latest_writer(StaticFileSegment::Headers) .latest_writer(StaticFileSegment::Headers)
@@ -1265,13 +1265,15 @@ mod tests {
let provider_rw = factory.database_provider_rw().unwrap(); let provider_rw = factory.database_provider_rw().unwrap();
let mut rng = generators::rng(); let mut rng = generators::rng();
let genesis = generators::random_block(&mut rng, 0, Default::default()); 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( let block = generators::random_block(
&mut rng, &mut rng,
1, 1,
generators::BlockParams { tx_count: Some(2), ..Default::default() }, 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(); let static_file_provider = provider_rw.static_file_provider();
static_file_provider.latest_writer(StaticFileSegment::Headers).unwrap().commit().unwrap(); static_file_provider.latest_writer(StaticFileSegment::Headers).unwrap().commit().unwrap();

View File

@@ -86,7 +86,7 @@ impl AccountHashingStage {
); );
for block in blocks { for block in blocks {
provider.insert_block(block.try_recover().unwrap()).unwrap(); provider.insert_block(&block.try_recover().unwrap()).unwrap();
} }
provider provider
.static_file_provider() .static_file_provider()

View File

@@ -96,11 +96,11 @@ mod tests {
let genesis = SealedBlock::<Block>::decode(&mut genesis_rlp).unwrap(); let genesis = SealedBlock::<Block>::decode(&mut genesis_rlp).unwrap();
let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice(); let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice();
let block = SealedBlock::<Block>::decode(&mut block_rlp).unwrap(); let block = SealedBlock::<Block>::decode(&mut block_rlp).unwrap();
provider_rw.insert_block(genesis.try_recover().unwrap()).unwrap(); let mut head = block.hash();
provider_rw.insert_block(block.clone().try_recover().unwrap()).unwrap(); 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. // Fill with bogus blocks to respect PruneMode distance.
let mut head = block.hash();
let mut rng = generators::rng(); let mut rng = generators::rng();
for block_number in 2..=tip { for block_number in 2..=tip {
let nblock = random_block( let nblock = random_block(
@@ -109,7 +109,7 @@ mod tests {
generators::BlockParams { parent: Some(head), ..Default::default() }, generators::BlockParams { parent: Some(head), ..Default::default() },
); );
head = nblock.hash(); head = nblock.hash();
provider_rw.insert_block(nblock.try_recover().unwrap()).unwrap(); provider_rw.insert_block(&nblock.try_recover().unwrap()).unwrap();
} }
provider_rw provider_rw
.static_file_provider() .static_file_provider()

View File

@@ -875,7 +875,7 @@ mod tests {
// Insert blocks into the database // Insert blocks into the database
for block in &database_blocks { for block in &database_blocks {
provider_rw.insert_block( 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()?; let provider_rw = factory.provider_rw()?;
for block in database_blocks { for block in database_blocks {
provider_rw.insert_block( 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()?; provider_rw.commit()?;
// Create a new provider // Create a new provider
@@ -1103,7 +1104,7 @@ mod tests {
let provider_rw = factory.provider_rw()?; let provider_rw = factory.provider_rw()?;
for block in database_blocks { for block in database_blocks {
provider_rw.insert_block( 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()?; provider_rw.commit()?;
@@ -1320,7 +1321,7 @@ mod tests {
// Insert and commit the block. // Insert and commit the block.
let provider_rw = factory.provider_rw()?; let provider_rw = factory.provider_rw()?;
provider_rw.insert_block(block_1)?; provider_rw.insert_block(&block_1)?;
provider_rw.commit()?; provider_rw.commit()?;
let provider = BlockchainProvider::new(factory)?; let provider = BlockchainProvider::new(factory)?;

View File

@@ -1566,7 +1566,7 @@ mod tests {
let provider_rw = factory.provider_rw()?; let provider_rw = factory.provider_rw()?;
for block in database_blocks { for block in database_blocks {
provider_rw.insert_block( 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()?; provider_rw.commit()?;
@@ -1677,7 +1677,7 @@ mod tests {
let provider_rw = factory.provider_rw()?; let provider_rw = factory.provider_rw()?;
for block in database_blocks { for block in database_blocks {
provider_rw.insert_block( 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()?; provider_rw.commit()?;

View File

@@ -103,7 +103,7 @@ mod tests {
// insert the block // insert the block
let provider_rw = provider_factory.provider_rw().unwrap(); 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(); provider_rw.commit().unwrap();
// create a consistent view provider and check that a ro provider can be made // create a consistent view provider and check that a ro provider can be made
@@ -121,7 +121,7 @@ mod tests {
// insert the block // insert the block
let provider_rw = provider_factory.provider_rw().unwrap(); 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(); provider_rw.commit().unwrap();
// ensure successful creation of a read-only provider, based on this new db state. // ensure successful creation of a read-only provider, based on this new db state.
@@ -136,7 +136,7 @@ mod tests {
// insert the block // insert the block
let provider_rw = provider_factory.provider_rw().unwrap(); 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(); provider_rw.commit().unwrap();
// check that creation of a read-only provider still works // check that creation of a read-only provider still works
@@ -156,7 +156,7 @@ mod tests {
// insert the block // insert the block
let provider_rw = provider_factory.provider_rw().unwrap(); 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(); provider_rw.commit().unwrap();
// create a consistent view provider and check that a ro provider can be made // create a consistent view provider and check that a ro provider can be made
@@ -174,7 +174,7 @@ mod tests {
// insert the block // insert the block
let provider_rw = provider_factory.provider_rw().unwrap(); 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(); provider_rw.commit().unwrap();
// create a second consistent view provider and check that a ro provider can be made // 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 // reinsert the block at the same height, but with a different hash
let provider_rw = provider_factory.provider_rw().unwrap(); 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(); provider_rw.commit().unwrap();
// ensure unsuccessful creation of a read-only provider, based on this new db state. // ensure unsuccessful creation of a read-only provider, based on this new db state.

View File

@@ -726,7 +726,7 @@ mod tests {
{ {
let factory = create_test_provider_factory(); let factory = create_test_provider_factory();
let provider = factory.provider_rw().unwrap(); 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!( assert_matches!(
provider.transaction_sender(0), Ok(Some(sender)) provider.transaction_sender(0), Ok(Some(sender))
if sender == block.body().transactions[0].recover_signer().unwrap() if sender == block.body().transactions[0].recover_signer().unwrap()
@@ -745,7 +745,7 @@ mod tests {
}; };
let factory = create_test_provider_factory(); let factory = create_test_provider_factory();
let provider = factory.with_prune_modes(prune_modes).provider_rw().unwrap(); 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_sender(0), Ok(None));
assert_matches!( assert_matches!(
provider.transaction_id(*block.body().transactions[0].tx_hash()), provider.transaction_id(*block.body().transactions[0].tx_hash()),
@@ -765,7 +765,7 @@ mod tests {
let factory = create_test_provider_factory(); let factory = create_test_provider_factory();
let provider = factory.provider_rw().unwrap(); 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::<tables::TransactionSenders>(range.clone()); let senders = provider.take::<tables::TransactionSenders>(range.clone());
assert_eq!( assert_eq!(

View File

@@ -356,7 +356,7 @@ impl<TX: DbTx + DbTxMut + 'static, N: NodeTypesForProvider> DatabaseProvider<TX,
let trie_data = block.trie_data(); let trie_data = block.trie_data();
let ExecutedBlock { recovered_block, execution_output, .. } = block; let ExecutedBlock { recovered_block, execution_output, .. } = block;
let block_number = recovered_block.number(); let block_number = recovered_block.number();
self.insert_block(Arc::unwrap_or_clone(recovered_block))?; self.insert_block(&recovered_block)?;
// Write state and changesets to the database. // Write state and changesets to the database.
// Must be written after blocks because of the receipt lookup. // Must be written after blocks because of the receipt lookup.
@@ -2875,7 +2875,7 @@ impl<TX: DbTxMut + DbTx + 'static, N: NodeTypesForProvider + 'static> BlockWrite
/// [`TransactionHashNumbers`](tables::TransactionHashNumbers). /// [`TransactionHashNumbers`](tables::TransactionHashNumbers).
fn insert_block( fn insert_block(
&self, &self,
block: RecoveredBlock<Self::Block>, block: &RecoveredBlock<Self::Block>,
) -> ProviderResult<StoredBlockBodyIndices> { ) -> ProviderResult<StoredBlockBodyIndices> {
let block_number = block.number(); let block_number = block.number();
let tx_count = block.body().transaction_count() as u64; let tx_count = block.body().transaction_count() as u64;
@@ -2915,7 +2915,7 @@ impl<TX: DbTxMut + DbTx + 'static, N: NodeTypesForProvider + 'static> BlockWrite
durations_recorder.record_relative(metrics::Action::InsertTransactionHashNumbers); 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!( debug!(
target: "providers::db", target: "providers::db",
@@ -2929,7 +2929,7 @@ impl<TX: DbTxMut + DbTx + 'static, N: NodeTypesForProvider + 'static> BlockWrite
fn append_block_bodies( fn append_block_bodies(
&self, &self,
bodies: Vec<(BlockNumber, Option<BodyTy<N>>)>, bodies: Vec<(BlockNumber, Option<&BodyTy<N>>)>,
) -> ProviderResult<()> { ) -> ProviderResult<()> {
let Some(from_block) = bodies.first().map(|(block, _)| *block) else { return Ok(()) }; let Some(from_block) = bodies.first().map(|(block, _)| *block) else { return Ok(()) };
@@ -3081,7 +3081,7 @@ impl<TX: DbTxMut + DbTx + 'static, N: NodeTypesForProvider + 'static> BlockWrite
// Insert the blocks // Insert the blocks
for block in blocks { for block in blocks {
self.insert_block(block)?; self.insert_block(&block)?;
durations_recorder.record_relative(metrics::Action::InsertBlock); durations_recorder.record_relative(metrics::Action::InsertBlock);
} }
@@ -3302,14 +3302,14 @@ mod tests {
let data = BlockchainTestData::default(); let data = BlockchainTestData::default();
let provider_rw = factory.provider_rw().unwrap(); 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 provider_rw
.write_state( .write_state(
&ExecutionOutcome { first_block: 0, receipts: vec![vec![]], ..Default::default() }, &ExecutionOutcome { first_block: 0, receipts: vec![vec![]], ..Default::default() },
crate::OriginalValuesKnown::No, crate::OriginalValuesKnown::No,
) )
.unwrap(); .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.write_state(&data.blocks[0].1, crate::OriginalValuesKnown::No).unwrap();
provider_rw.commit().unwrap(); provider_rw.commit().unwrap();
@@ -3328,7 +3328,7 @@ mod tests {
let data = BlockchainTestData::default(); let data = BlockchainTestData::default();
let provider_rw = factory.provider_rw().unwrap(); 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 provider_rw
.write_state( .write_state(
&ExecutionOutcome { first_block: 0, receipts: vec![vec![]], ..Default::default() }, &ExecutionOutcome { first_block: 0, receipts: vec![vec![]], ..Default::default() },
@@ -3336,7 +3336,7 @@ mod tests {
) )
.unwrap(); .unwrap();
for i in 0..3 { 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.write_state(&data.blocks[i].1, crate::OriginalValuesKnown::No).unwrap();
} }
provider_rw.commit().unwrap(); provider_rw.commit().unwrap();
@@ -3358,7 +3358,7 @@ mod tests {
let data = BlockchainTestData::default(); let data = BlockchainTestData::default();
let provider_rw = factory.provider_rw().unwrap(); 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 provider_rw
.write_state( .write_state(
&ExecutionOutcome { first_block: 0, receipts: vec![vec![]], ..Default::default() }, &ExecutionOutcome { first_block: 0, receipts: vec![vec![]], ..Default::default() },
@@ -3368,7 +3368,7 @@ mod tests {
// insert blocks 1-3 with receipts // insert blocks 1-3 with receipts
for i in 0..3 { 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.write_state(&data.blocks[i].1, crate::OriginalValuesKnown::No).unwrap();
} }
provider_rw.commit().unwrap(); provider_rw.commit().unwrap();
@@ -3389,7 +3389,7 @@ mod tests {
let data = BlockchainTestData::default(); let data = BlockchainTestData::default();
let provider_rw = factory.provider_rw().unwrap(); 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 provider_rw
.write_state( .write_state(
&ExecutionOutcome { first_block: 0, receipts: vec![vec![]], ..Default::default() }, &ExecutionOutcome { first_block: 0, receipts: vec![vec![]], ..Default::default() },
@@ -3397,7 +3397,7 @@ mod tests {
) )
.unwrap(); .unwrap();
for i in 0..3 { 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.write_state(&data.blocks[i].1, crate::OriginalValuesKnown::No).unwrap();
} }
provider_rw.commit().unwrap(); provider_rw.commit().unwrap();
@@ -3433,7 +3433,7 @@ mod tests {
let provider_rw = factory.provider_rw().unwrap(); let provider_rw = factory.provider_rw().unwrap();
for block in blocks { 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(); provider_rw.commit().unwrap();
@@ -3452,7 +3452,7 @@ mod tests {
let data = BlockchainTestData::default(); let data = BlockchainTestData::default();
let provider_rw = factory.provider_rw().unwrap(); 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 provider_rw
.write_state( .write_state(
&ExecutionOutcome { first_block: 0, receipts: vec![vec![]], ..Default::default() }, &ExecutionOutcome { first_block: 0, receipts: vec![vec![]], ..Default::default() },
@@ -3460,7 +3460,7 @@ mod tests {
) )
.unwrap(); .unwrap();
for i in 0..3 { 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.write_state(&data.blocks[i].1, crate::OriginalValuesKnown::No).unwrap();
} }
provider_rw.commit().unwrap(); provider_rw.commit().unwrap();
@@ -4760,7 +4760,7 @@ mod tests {
block_num, block_num,
BlockParams { tx_count: Some(tx_count), ..Default::default() }, 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();
} }
}; };

View File

@@ -463,7 +463,9 @@ mod tests {
let provider = factory.database_provider_rw().unwrap(); let provider = factory.database_provider_rw().unwrap();
let mut tx_count = 0u64; let mut tx_count = 0u64;
for block in &blocks { 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 { for tx in &block.body().transactions {
let hash = tx.trie_hash(); let hash = tx.trie_hash();
tx_hashes.push(hash); tx_hashes.push(hash);
@@ -603,7 +605,9 @@ mod tests {
let provider = factory.database_provider_rw().unwrap(); let provider = factory.database_provider_rw().unwrap();
let mut tx_count = 0u64; let mut tx_count = 0u64;
for block in &blocks { 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 { for tx in &block.body().transactions {
let hash = tx.trie_hash(); let hash = tx.trie_hash();
rocksdb.put::<tables::TransactionHashNumbers>(hash, &tx_count).unwrap(); rocksdb.put::<tables::TransactionHashNumbers>(hash, &tx_count).unwrap();
@@ -667,7 +671,9 @@ mod tests {
let provider = factory.database_provider_rw().unwrap(); let provider = factory.database_provider_rw().unwrap();
// Insert ALL blocks (0-5) to write transactions to static files // Insert ALL blocks (0-5) to write transactions to static files
for block in &blocks { 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 { for tx in &block.body().transactions {
let hash = tx.trie_hash(); let hash = tx.trie_hash();
tx_hashes.push(hash); tx_hashes.push(hash);
@@ -831,7 +837,9 @@ mod tests {
let provider = factory.database_provider_rw().unwrap(); let provider = factory.database_provider_rw().unwrap();
for block in &blocks { 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 // Store transaction hash -> tx_number mappings in RocksDB
for tx in &block.body().transactions { for tx in &block.body().transactions {

View File

@@ -53,7 +53,7 @@ pub trait BlockWriter {
/// and transition in the block. /// and transition in the block.
fn insert_block( fn insert_block(
&self, &self,
block: RecoveredBlock<Self::Block>, block: &RecoveredBlock<Self::Block>,
) -> ProviderResult<StoredBlockBodyIndices>; ) -> ProviderResult<StoredBlockBodyIndices>;
/// Appends a batch of block bodies extending the canonical chain. This is invoked during /// 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. /// Bodies are passed as [`Option`]s, if body is `None` the corresponding block is empty.
fn append_block_bodies( fn append_block_bodies(
&self, &self,
bodies: Vec<(BlockNumber, Option<<Self::Block as Block>::Body>)>, bodies: Vec<(BlockNumber, Option<&<Self::Block as Block>::Body>)>,
) -> ProviderResult<()>; ) -> ProviderResult<()>;
/// Removes all blocks above the given block number from the database. /// Removes all blocks above the given block number from the database.

View File

@@ -28,7 +28,7 @@ pub trait BlockBodyWriter<Provider, Body: BlockBody> {
fn write_block_bodies( fn write_block_bodies(
&self, &self,
provider: &Provider, provider: &Provider,
bodies: Vec<(BlockNumber, Option<Body>)>, bodies: Vec<(BlockNumber, Option<&Body>)>,
) -> ProviderResult<()>; ) -> ProviderResult<()>;
/// Removes all block bodies above the given block number from the database. /// Removes all block bodies above the given block number from the database.
@@ -102,7 +102,7 @@ where
fn write_block_bodies( fn write_block_bodies(
&self, &self,
provider: &Provider, provider: &Provider,
bodies: Vec<(u64, Option<alloy_consensus::BlockBody<T, H>>)>, bodies: Vec<(u64, Option<&alloy_consensus::BlockBody<T, H>>)>,
) -> ProviderResult<()> { ) -> ProviderResult<()> {
let mut ommers_cursor = provider.tx_ref().cursor_write::<tables::BlockOmmers<H>>()?; let mut ommers_cursor = provider.tx_ref().cursor_write::<tables::BlockOmmers<H>>()?;
let mut withdrawals_cursor = let mut withdrawals_cursor =
@@ -113,11 +113,12 @@ where
// Write ommers if any // Write ommers if any
if !body.ommers.is_empty() { 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 // Write withdrawals if any
if let Some(withdrawals) = body.withdrawals && if let Some(withdrawals) = body.withdrawals.clone() &&
!withdrawals.is_empty() !withdrawals.is_empty()
{ {
withdrawals_cursor.append(block_number, &StoredBlockWithdrawals { withdrawals })?; withdrawals_cursor.append(block_number, &StoredBlockWithdrawals { withdrawals })?;
@@ -212,7 +213,7 @@ where
fn write_block_bodies( fn write_block_bodies(
&self, &self,
_provider: &Provider, _provider: &Provider,
_bodies: Vec<(u64, Option<alloy_consensus::BlockBody<T, H>>)>, _bodies: Vec<(u64, Option<&alloy_consensus::BlockBody<T, H>>)>,
) -> ProviderResult<()> { ) -> ProviderResult<()> {
// noop // noop
Ok(()) Ok(())

View File

@@ -218,7 +218,7 @@ fn run_case(
.unwrap(); .unwrap();
provider provider
.insert_block(genesis_block.clone()) .insert_block(&genesis_block)
.map_err(|err| Error::block_failed(0, Default::default(), err))?; .map_err(|err| Error::block_failed(0, Default::default(), err))?;
// Increment block number for receipts static file // Increment block number for receipts static file
@@ -249,7 +249,7 @@ fn run_case(
// Insert the block into the database // Insert the block into the database
provider provider
.insert_block(block.clone()) .insert_block(block)
.map_err(|err| Error::block_failed(block_number, Default::default(), err))?; .map_err(|err| Error::block_failed(block_number, Default::default(), err))?;
// Commit static files, so we can query the headers for stateless execution below // Commit static files, so we can query the headers for stateless execution below
provider provider