From e5a634ceced373bd87e308025e754602113376e8 Mon Sep 17 00:00:00 2001 From: Roman Krasiuk Date: Mon, 1 Jul 2024 08:41:26 -0700 Subject: [PATCH] chore(execution): verify cumulative gas used before receipts root (#9224) --- crates/ethereum/consensus/src/validation.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/crates/ethereum/consensus/src/validation.rs b/crates/ethereum/consensus/src/validation.rs index fafd0ee4217b..523bed077dec 100644 --- a/crates/ethereum/consensus/src/validation.rs +++ b/crates/ethereum/consensus/src/validation.rs @@ -14,6 +14,16 @@ pub fn validate_block_post_execution( receipts: &[Receipt], requests: &[Request], ) -> Result<(), ConsensusError> { + // Check if gas used matches the value set in header. + let cumulative_gas_used = + receipts.last().map(|receipt| receipt.cumulative_gas_used).unwrap_or(0); + if block.gas_used != cumulative_gas_used { + return Err(ConsensusError::BlockGasUsed { + gas: GotExpected { got: cumulative_gas_used, expected: block.gas_used }, + gas_spent_by_tx: gas_spent_by_transactions(receipts), + }) + } + // Before Byzantium, receipts contained state root that would mean that expensive // operation as hashing that is required for state root got calculated in every // transaction This was replaced with is_success flag. @@ -27,16 +37,6 @@ pub fn validate_block_post_execution( } } - // Check if gas used matches the value set in header. - let cumulative_gas_used = - receipts.last().map(|receipt| receipt.cumulative_gas_used).unwrap_or(0); - if block.gas_used != cumulative_gas_used { - return Err(ConsensusError::BlockGasUsed { - gas: GotExpected { got: cumulative_gas_used, expected: block.gas_used }, - gas_spent_by_tx: gas_spent_by_transactions(receipts), - }) - } - // Validate that the header requests root matches the calculated requests root if chain_spec.is_prague_active_at_timestamp(block.timestamp) { let Some(header_requests_root) = block.header.requests_root else {