reth_rpc/eth/helpers/
receipt.rs1use reth_primitives::{Receipt, TransactionMeta, TransactionSigned};
4use reth_provider::{BlockReader, ReceiptProvider, TransactionsProvider};
5use reth_rpc_eth_api::{helpers::LoadReceipt, FromEthApiError, RpcNodeCoreExt, RpcReceipt};
6use reth_rpc_eth_types::{EthApiError, EthReceiptBuilder};
7
8use crate::EthApi;
9
10impl<Provider, Pool, Network, EvmConfig> LoadReceipt for EthApi<Provider, Pool, Network, EvmConfig>
11where
12 Self: RpcNodeCoreExt<
13 Provider: TransactionsProvider<Transaction = TransactionSigned>
14 + ReceiptProvider<Receipt = reth_primitives::Receipt>,
15 >,
16 Provider: BlockReader,
17{
18 async fn build_transaction_receipt(
19 &self,
20 tx: TransactionSigned,
21 meta: TransactionMeta,
22 receipt: Receipt,
23 ) -> Result<RpcReceipt<Self::NetworkTypes>, Self::Error> {
24 let hash = meta.block_hash;
25 let all_receipts = self
27 .cache()
28 .get_receipts(hash)
29 .await
30 .map_err(Self::Error::from_eth_err)?
31 .ok_or(EthApiError::HeaderNotFound(hash.into()))?;
32
33 Ok(EthReceiptBuilder::new(&tx, meta, &receipt, &all_receipts)?.build())
34 }
35}