mirror of
https://github.com/paradigmxyz/reth.git
synced 2026-01-07 22:43:56 -05:00
feat(storage): make insert_block() operate with references (#20504)
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
@@ -79,7 +79,7 @@ where
|
||||
+ StaticFileProviderFactory<Primitives: NodePrimitives<BlockHeader: Compact>>,
|
||||
{
|
||||
provider_rw.insert_block(
|
||||
SealedBlock::<<Provider::Primitives as NodePrimitives>::Block>::from_sealed_parts(
|
||||
&SealedBlock::<<Provider::Primitives as NodePrimitives>::Block>::from_sealed_parts(
|
||||
header.clone(),
|
||||
Default::default(),
|
||||
)
|
||||
|
||||
@@ -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)?;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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<B: Block> InMemorySize for BlockResponse<B> {
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -748,8 +748,8 @@ mod tests {
|
||||
let genesis = SealedBlock::<Block>::decode(&mut genesis_rlp).unwrap();
|
||||
let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice();
|
||||
let block = SealedBlock::<Block>::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::<Block>::decode(&mut genesis_rlp).unwrap();
|
||||
let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice();
|
||||
let block = SealedBlock::<Block>::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::<Block>::decode(&mut genesis_rlp).unwrap();
|
||||
let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice();
|
||||
let block = SealedBlock::<Block>::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::<Block>::decode(&mut genesis_rlp).unwrap();
|
||||
let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice();
|
||||
let block = SealedBlock::<Block>::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::<Block>::decode(&mut genesis_rlp).unwrap();
|
||||
let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice();
|
||||
let block = SealedBlock::<Block>::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::<Block>::decode(&mut genesis_rlp).unwrap();
|
||||
let mut block_rlp = hex!("f9025ff901f7a0c86e8cc0310ae7c531c758678ddbfd16fc51c8cef8cec650b032de9869e8b94fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa050554882fbbda2c2fd93fdc466db9946ea262a67f7a76cc169e714f105ab583da00967f09ef1dfed20c0eacfaa94d5cd4002eda3242ac47eae68972d07b106d192a0e3c8b47fbfc94667ef4cceb17e5cc21e3b1eebd442cebb27f07562b33836290db90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001830f42408238108203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f862f860800a83061a8094095e7baea6a6c7c4c2dfeb977efac326af552d8780801ba072ed817487b84ba367d15d2f039b5fc5f087d0a8882fbdf73e8cb49357e1ce30a0403d800545b8fc544f92ce8124e2255f8c3c6af93f28243a120585d4c4c6a2a3c0").as_slice();
|
||||
let block = SealedBlock::<Block>::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();
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -96,11 +96,11 @@ mod tests {
|
||||
let genesis = SealedBlock::<Block>::decode(&mut genesis_rlp).unwrap();
|
||||
let mut block_rlp = hex!("f90262f901f9a075c371ba45999d87f4542326910a11af515897aebce5265d3f6acd1f1161f82fa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347942adc25665018aa1fe0e6bc666dac8fc2697ff9baa098f2dcd87c8ae4083e7017a05456c14eea4b1db2032126e27b3b1563d57d7cc0a08151d548273f6683169524b66ca9fe338b9ce42bc3540046c828fd939ae23bcba03f4e5c2ec5b2170b711d97ee755c160457bb58d8daa338e835ec02ae6860bbabb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018502540be40082a8798203e800a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f863f861800a8405f5e10094100000000000000000000000000000000000000080801ba07e09e26678ed4fac08a249ebe8ed680bf9051a5e14ad223e4b2b9d26e0208f37a05f6e3f188e3e6eab7d7d3b6568f5eac7d687b08d307d3154ccd8c87b4630509bc0").as_slice();
|
||||
let block = SealedBlock::<Block>::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()
|
||||
|
||||
@@ -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)?;
|
||||
|
||||
@@ -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()?;
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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::<tables::TransactionSenders>(range.clone());
|
||||
assert_eq!(
|
||||
|
||||
@@ -356,7 +356,7 @@ impl<TX: DbTx + DbTxMut + 'static, N: NodeTypesForProvider> DatabaseProvider<TX,
|
||||
let trie_data = block.trie_data();
|
||||
let ExecutedBlock { recovered_block, execution_output, .. } = block;
|
||||
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.
|
||||
// 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).
|
||||
fn insert_block(
|
||||
&self,
|
||||
block: RecoveredBlock<Self::Block>,
|
||||
block: &RecoveredBlock<Self::Block>,
|
||||
) -> ProviderResult<StoredBlockBodyIndices> {
|
||||
let block_number = block.number();
|
||||
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);
|
||||
}
|
||||
|
||||
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<TX: DbTxMut + DbTx + 'static, N: NodeTypesForProvider + 'static> BlockWrite
|
||||
|
||||
fn append_block_bodies(
|
||||
&self,
|
||||
bodies: Vec<(BlockNumber, Option<BodyTy<N>>)>,
|
||||
bodies: Vec<(BlockNumber, Option<&BodyTy<N>>)>,
|
||||
) -> ProviderResult<()> {
|
||||
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
|
||||
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();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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::<tables::TransactionHashNumbers>(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 {
|
||||
|
||||
@@ -53,7 +53,7 @@ pub trait BlockWriter {
|
||||
/// and transition in the block.
|
||||
fn insert_block(
|
||||
&self,
|
||||
block: RecoveredBlock<Self::Block>,
|
||||
block: &RecoveredBlock<Self::Block>,
|
||||
) -> ProviderResult<StoredBlockBodyIndices>;
|
||||
|
||||
/// 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<<Self::Block as Block>::Body>)>,
|
||||
bodies: Vec<(BlockNumber, Option<&<Self::Block as Block>::Body>)>,
|
||||
) -> ProviderResult<()>;
|
||||
|
||||
/// Removes all blocks above the given block number from the database.
|
||||
|
||||
@@ -28,7 +28,7 @@ pub trait BlockBodyWriter<Provider, Body: BlockBody> {
|
||||
fn write_block_bodies(
|
||||
&self,
|
||||
provider: &Provider,
|
||||
bodies: Vec<(BlockNumber, Option<Body>)>,
|
||||
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<alloy_consensus::BlockBody<T, H>>)>,
|
||||
bodies: Vec<(u64, Option<&alloy_consensus::BlockBody<T, H>>)>,
|
||||
) -> ProviderResult<()> {
|
||||
let mut ommers_cursor = provider.tx_ref().cursor_write::<tables::BlockOmmers<H>>()?;
|
||||
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<alloy_consensus::BlockBody<T, H>>)>,
|
||||
_bodies: Vec<(u64, Option<&alloy_consensus::BlockBody<T, H>>)>,
|
||||
) -> ProviderResult<()> {
|
||||
// noop
|
||||
Ok(())
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user