perf(op-receipts): reuse l1_block_info for multiple receipts (#13781)

This commit is contained in:
Hai | RISE
2025-01-13 12:09:02 +07:00
committed by GitHub
parent 567d5c60e6
commit 23526646cb
2 changed files with 15 additions and 10 deletions

View File

@ -40,7 +40,7 @@ where
let excess_blob_gas = block.excess_blob_gas();
let timestamp = block.timestamp();
let l1_block_info =
let mut l1_block_info =
reth_optimism_evm::extract_l1_info(block.body()).map_err(OpEthApiError::from)?;
return block
@ -60,13 +60,18 @@ where
timestamp,
};
// We must clear this cache as different L2 transactions can have different
// L1 costs. A potential improvement here is to only clear the cache if the
// new transaction input has changed, since otherwise the L1 cost wouldn't.
l1_block_info.clear_tx_l1_cost();
Ok(OpReceiptBuilder::new(
&self.inner.eth_api.provider().chain_spec(),
tx,
meta,
receipt,
&receipts,
l1_block_info.clone(),
&mut l1_block_info,
)?
.build())
})

View File

@ -40,7 +40,7 @@ where
meta.block_hash.into(),
)))?;
let l1_block_info =
let mut l1_block_info =
reth_optimism_evm::extract_l1_info(block.body()).map_err(OpEthApiError::from)?;
Ok(OpReceiptBuilder::new(
@ -49,7 +49,7 @@ where
meta,
&receipt,
&receipts,
l1_block_info,
&mut l1_block_info,
)?
.build())
}
@ -107,7 +107,7 @@ impl OpReceiptFieldsBuilder {
mut self,
chain_spec: &OpChainSpec,
tx: &OpTransactionSigned,
mut l1_block_info: revm::L1BlockInfo,
l1_block_info: &mut revm::L1BlockInfo,
) -> Result<Self, OpEthApiError> {
let raw_tx = tx.encoded_2718();
let timestamp = self.block_timestamp;
@ -199,7 +199,7 @@ impl OpReceiptBuilder {
meta: TransactionMeta,
receipt: &OpReceipt,
all_receipts: &[OpReceipt],
l1_block_info: revm::L1BlockInfo,
l1_block_info: &mut revm::L1BlockInfo,
) -> Result<Self, OpEthApiError> {
let timestamp = meta.timestamp;
let core_receipt =
@ -298,14 +298,14 @@ mod test {
..Default::default()
};
let l1_block_info =
let mut l1_block_info =
reth_optimism_evm::extract_l1_info(&block.body).expect("should extract l1 info");
// test
assert!(OP_MAINNET.is_fjord_active_at_timestamp(BLOCK_124665056_TIMESTAMP));
let receipt_meta = OpReceiptFieldsBuilder::new(BLOCK_124665056_TIMESTAMP)
.l1_block_info(&OP_MAINNET, &tx_1, l1_block_info)
.l1_block_info(&OP_MAINNET, &tx_1, &mut l1_block_info)
.expect("should parse revm l1 info")
.build();
@ -363,7 +363,7 @@ mod test {
body: BlockBody { transactions: vec![tx_0], ..Default::default() },
..Default::default()
};
let l1_block_info =
let mut l1_block_info =
reth_optimism_evm::extract_l1_info(&block.body).expect("should extract l1 info");
// https://basescan.org/tx/0xf9420cbaf66a2dda75a015488d37262cbfd4abd0aad7bb2be8a63e14b1fa7a94
@ -371,7 +371,7 @@ mod test {
let tx_1 = OpTransactionSigned::decode_2718(&mut &tx[..]).unwrap();
let receipt_meta = OpReceiptFieldsBuilder::new(1730216981)
.l1_block_info(&BASE_MAINNET, &tx_1, l1_block_info)
.l1_block_info(&BASE_MAINNET, &tx_1, &mut l1_block_info)
.expect("should parse revm l1 info")
.build();