reth_seismic_evm/
receipts.rs

1use alloy_consensus::{Eip658Value, Receipt};
2use alloy_evm::eth::receipt_builder::{ReceiptBuilder, ReceiptBuilderCtx};
3use reth_evm::Evm;
4use reth_seismic_primitives::{SeismicReceipt, SeismicTransactionSigned};
5use seismic_alloy_consensus::SeismicTxType;
6
7/// A builder that operates on seismic-reth primitive types, specifically
8/// [`SeismicTransactionSigned`] and [`SeismicReceipt`].
9///
10/// Why is this different than SeismicAlloyReceiptBuilder in seismic-evm? Can we reuse code?
11#[derive(Debug, Default, Clone, Copy)]
12#[non_exhaustive]
13pub struct SeismicRethReceiptBuilder;
14
15impl ReceiptBuilder for SeismicRethReceiptBuilder {
16    type Transaction = SeismicTransactionSigned;
17    type Receipt = SeismicReceipt;
18
19    fn build_receipt<E: Evm>(
20        &self,
21        ctx: ReceiptBuilderCtx<'_, SeismicTransactionSigned, E>,
22    ) -> Self::Receipt {
23        match ctx.tx.tx_type() {
24            ty => {
25                let receipt = Receipt {
26                    status: Eip658Value::Eip658(ctx.result.is_success()),
27                    cumulative_gas_used: ctx.cumulative_gas_used,
28                    logs: ctx.result.into_logs(),
29                };
30
31                match ty {
32                    SeismicTxType::Legacy => SeismicReceipt::Legacy(receipt),
33                    SeismicTxType::Eip1559 => SeismicReceipt::Eip1559(receipt),
34                    SeismicTxType::Eip2930 => SeismicReceipt::Eip2930(receipt),
35                    SeismicTxType::Eip4844 => SeismicReceipt::Eip4844(receipt),
36                    SeismicTxType::Eip7702 => SeismicReceipt::Eip7702(receipt),
37                    SeismicTxType::Seismic => SeismicReceipt::Seismic(receipt),
38                }
39            }
40        }
41    }
42}