reth_optimism_evm/
receipts.rs
1use alloy_consensus::{Eip658Value, Receipt};
2use alloy_evm::eth::receipt_builder::ReceiptBuilderCtx;
3use alloy_op_evm::block::receipt_builder::OpReceiptBuilder;
4use op_alloy_consensus::{OpDepositReceipt, OpTxType};
5use reth_evm::Evm;
6use reth_optimism_primitives::{OpReceipt, OpTransactionSigned};
7
8#[derive(Debug, Default, Clone, Copy)]
11#[non_exhaustive]
12pub struct OpRethReceiptBuilder;
13
14impl OpReceiptBuilder for OpRethReceiptBuilder {
15 type Transaction = OpTransactionSigned;
16 type Receipt = OpReceipt;
17
18 fn build_receipt<'a, E: Evm>(
19 &self,
20 ctx: ReceiptBuilderCtx<'a, OpTransactionSigned, E>,
21 ) -> Result<Self::Receipt, ReceiptBuilderCtx<'a, OpTransactionSigned, E>> {
22 match ctx.tx.tx_type() {
23 OpTxType::Deposit => Err(ctx),
24 ty => {
25 let receipt = Receipt {
26 status: Eip658Value::Eip658(ctx.result.is_success()),
29 cumulative_gas_used: ctx.cumulative_gas_used,
30 logs: ctx.result.into_logs(),
31 };
32
33 Ok(match ty {
34 OpTxType::Legacy => OpReceipt::Legacy(receipt),
35 OpTxType::Eip1559 => OpReceipt::Eip1559(receipt),
36 OpTxType::Eip2930 => OpReceipt::Eip2930(receipt),
37 OpTxType::Eip7702 => OpReceipt::Eip7702(receipt),
38 OpTxType::Deposit => unreachable!(),
39 })
40 }
41 }
42 }
43
44 fn build_deposit_receipt(&self, inner: OpDepositReceipt) -> Self::Receipt {
45 OpReceipt::Deposit(inner)
46 }
47}