reth_e2e_test_utils/
receipt.rs1use alloy_network::{Network, ReceiptResponse};
4use alloy_provider::PendingTransactionBuilder;
5use eyre::ensure;
6use std::future::Future;
7
8pub trait PendingTransactionExt<N: Network> {
10 fn successful_receipt(self) -> impl Future<Output = eyre::Result<N::ReceiptResponse>> + Send;
18}
19
20impl<N: Network> PendingTransactionExt<N> for PendingTransactionBuilder<N> {
21 async fn successful_receipt(self) -> eyre::Result<N::ReceiptResponse> {
22 let receipt = self.get_receipt().await?;
23 ensure!(
24 receipt.status(),
25 "transaction {} reverted after using {} gas",
26 receipt.transaction_hash(),
27 receipt.gas_used()
28 );
29 Ok(receipt)
30 }
31}
32
33pub async fn await_successful_receipts<N: Network>(
37 txs: impl IntoIterator<Item = PendingTransactionBuilder<N>>,
38) -> eyre::Result<Vec<N::ReceiptResponse>> {
39 let mut receipts = Vec::new();
40 for tx in txs {
41 receipts.push(tx.successful_receipt().await?);
42 }
43 Ok(receipts)
44}