mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
perf: remove redundant ommers sealing (#2386)
This commit is contained in:
@ -182,8 +182,7 @@ pub fn validate_block_standalone(
|
||||
) -> Result<(), ConsensusError> {
|
||||
// Check ommers hash
|
||||
// TODO(onbjerg): This should probably be accessible directly on [Block]
|
||||
let ommers_hash =
|
||||
reth_primitives::proofs::calculate_ommers_root(block.ommers.iter().map(|h| h.as_ref()));
|
||||
let ommers_hash = reth_primitives::proofs::calculate_ommers_root(block.ommers.iter());
|
||||
if block.header.ommers_hash != ommers_hash {
|
||||
return Err(ConsensusError::BodyOmmersHashDiff {
|
||||
got: ommers_hash,
|
||||
|
||||
@ -125,7 +125,7 @@ pub fn random_block(
|
||||
}
|
||||
.seal_slow(),
|
||||
body: transactions,
|
||||
ommers: ommers.into_iter().map(Header::seal_slow).collect(),
|
||||
ommers,
|
||||
withdrawals: None,
|
||||
}
|
||||
}
|
||||
|
||||
@ -584,11 +584,7 @@ mod tests {
|
||||
.map(|block| {
|
||||
(
|
||||
block.hash(),
|
||||
BlockBody {
|
||||
transactions: block.body,
|
||||
ommers: block.ommers.into_iter().map(|header| header.unseal()).collect(),
|
||||
withdrawals: None,
|
||||
},
|
||||
BlockBody { transactions: block.body, ommers: block.ommers, withdrawals: None },
|
||||
)
|
||||
})
|
||||
.collect::<HashMap<_, _>>();
|
||||
|
||||
@ -165,7 +165,7 @@ where
|
||||
let block = SealedBlock {
|
||||
header: next_header,
|
||||
body: next_body.transactions,
|
||||
ommers: next_body.ommers.into_iter().map(|h| h.seal_slow()).collect(),
|
||||
ommers: next_body.ommers,
|
||||
withdrawals: next_body.withdrawals,
|
||||
};
|
||||
|
||||
|
||||
@ -24,7 +24,7 @@ pub(crate) fn zip_blocks<'a>(
|
||||
BlockResponse::Full(SealedBlock {
|
||||
header: header.clone(),
|
||||
body: body.transactions,
|
||||
ommers: body.ommers.into_iter().map(|o| o.seal_slow()).collect(),
|
||||
ommers: body.ommers,
|
||||
withdrawals: body.withdrawals,
|
||||
})
|
||||
}
|
||||
|
||||
@ -28,7 +28,7 @@ pub(crate) fn generate_bodies(
|
||||
block.hash(),
|
||||
BlockBody {
|
||||
transactions: block.body,
|
||||
ommers: block.ommers.into_iter().map(|header| header.unseal()).collect(),
|
||||
ommers: block.ommers,
|
||||
withdrawals: block.withdrawals,
|
||||
},
|
||||
)
|
||||
|
||||
@ -36,7 +36,7 @@ impl Block {
|
||||
SealedBlock {
|
||||
header: self.header.seal_slow(),
|
||||
body: self.body,
|
||||
ommers: self.ommers.into_iter().map(|o| o.seal_slow()).collect(),
|
||||
ommers: self.ommers,
|
||||
withdrawals: self.withdrawals,
|
||||
}
|
||||
}
|
||||
@ -105,7 +105,7 @@ pub struct SealedBlock {
|
||||
/// Transactions with signatures.
|
||||
pub body: Vec<TransactionSigned>,
|
||||
/// Ommer/uncle headers
|
||||
pub ommers: Vec<SealedHeader>,
|
||||
pub ommers: Vec<Header>,
|
||||
/// Block withdrawals.
|
||||
pub withdrawals: Option<Vec<Withdrawal>>,
|
||||
}
|
||||
@ -117,7 +117,7 @@ impl SealedBlock {
|
||||
}
|
||||
|
||||
/// Splits the sealed block into underlying components
|
||||
pub fn split(self) -> (SealedHeader, Vec<TransactionSigned>, Vec<SealedHeader>) {
|
||||
pub fn split(self) -> (SealedHeader, Vec<TransactionSigned>, Vec<Header>) {
|
||||
(self.header, self.body, self.ommers)
|
||||
}
|
||||
|
||||
@ -137,7 +137,7 @@ impl SealedBlock {
|
||||
Block {
|
||||
header: self.header.unseal(),
|
||||
body: self.body,
|
||||
ommers: self.ommers.into_iter().map(|o| o.unseal()).collect(),
|
||||
ommers: self.ommers,
|
||||
withdrawals: self.withdrawals,
|
||||
}
|
||||
}
|
||||
|
||||
@ -403,7 +403,7 @@ mod tests {
|
||||
SealedBlock {
|
||||
header: transformed.header.seal_slow(),
|
||||
body: transformed.body,
|
||||
ommers: transformed.ommers.into_iter().map(Header::seal_slow).collect(),
|
||||
ommers: transformed.ommers,
|
||||
withdrawals: transformed.withdrawals,
|
||||
}
|
||||
.into()
|
||||
|
||||
@ -126,16 +126,8 @@ impl<DB: Database, D: BodyDownloader> Stage<DB> for BodyStage<D> {
|
||||
|
||||
// Write ommers if any
|
||||
if !block.ommers.is_empty() {
|
||||
ommers_cursor.append(
|
||||
block_number,
|
||||
StoredBlockOmmers {
|
||||
ommers: block
|
||||
.ommers
|
||||
.into_iter()
|
||||
.map(|header| header.unseal())
|
||||
.collect(),
|
||||
},
|
||||
)?;
|
||||
ommers_cursor
|
||||
.append(block_number, StoredBlockOmmers { ommers: block.ommers })?;
|
||||
}
|
||||
|
||||
// Write withdrawals if any
|
||||
@ -438,7 +430,7 @@ mod tests {
|
||||
block.hash(),
|
||||
BlockBody {
|
||||
transactions: block.body.clone(),
|
||||
ommers: block.ommers.iter().cloned().map(|ommer| ommer.unseal()).collect(),
|
||||
ommers: block.ommers.clone(),
|
||||
withdrawals: block.withdrawals.clone(),
|
||||
},
|
||||
)
|
||||
@ -525,13 +517,7 @@ mod tests {
|
||||
if !progress.ommers_hash_is_empty() {
|
||||
tx.put::<tables::BlockOmmers>(
|
||||
progress.number,
|
||||
StoredBlockOmmers {
|
||||
ommers: progress
|
||||
.ommers
|
||||
.iter()
|
||||
.map(|o| o.clone().unseal())
|
||||
.collect(),
|
||||
},
|
||||
StoredBlockOmmers { ommers: progress.ommers.clone() },
|
||||
)?;
|
||||
}
|
||||
Ok(())
|
||||
@ -746,7 +732,7 @@ mod tests {
|
||||
response.push(BlockResponse::Full(SealedBlock {
|
||||
header,
|
||||
body: body.transactions,
|
||||
ommers: body.ommers.into_iter().map(|h| h.seal_slow()).collect(),
|
||||
ommers: body.ommers,
|
||||
withdrawals: body.withdrawals,
|
||||
}));
|
||||
}
|
||||
|
||||
@ -754,15 +754,7 @@ where
|
||||
let mut ommers = Vec::new();
|
||||
if let Some((block_number, _)) = block_ommers.as_ref() {
|
||||
if *block_number == main_block_number {
|
||||
// Seal ommers as they dont have hash.
|
||||
ommers = block_ommers
|
||||
.take()
|
||||
.unwrap()
|
||||
.1
|
||||
.ommers
|
||||
.into_iter()
|
||||
.map(|h| h.seal_slow())
|
||||
.collect();
|
||||
ommers = block_ommers.take().unwrap().1.ommers;
|
||||
block_ommers = block_ommers_iter.next();
|
||||
}
|
||||
};
|
||||
|
||||
@ -42,10 +42,7 @@ pub fn insert_block<'a, TX: DbTxMut<'a> + DbTx<'a>>(
|
||||
|
||||
// insert body ommers data
|
||||
if !block.ommers.is_empty() {
|
||||
tx.put::<tables::BlockOmmers>(
|
||||
block.number,
|
||||
StoredBlockOmmers { ommers: block.ommers.iter().map(|h| h.as_ref().clone()).collect() },
|
||||
)?;
|
||||
tx.put::<tables::BlockOmmers>(block.number, StoredBlockOmmers { ommers: block.ommers })?;
|
||||
}
|
||||
|
||||
let mut next_tx_num =
|
||||
|
||||
Reference in New Issue
Block a user