Trait reth::core::rpc::api::servers::eth::helpers::EthTransactions

source ·
pub trait EthTransactions: LoadTransaction {
Show 17 methods // Required methods fn provider(&self) -> impl BlockReaderIdExt; fn raw_tx_forwarder(&self) -> Option<Arc<dyn RawTransactionForwarder>>; fn signers(&self) -> &RwLock<RawRwLock, Vec<Box<dyn EthSigner>>>; // Provided methods fn transaction_by_hash( &self, hash: FixedBytes<32>, ) -> impl Future<Output = Result<Option<TransactionSource>, EthApiError>> + Send { ... } fn transactions_by_block( &self, block: FixedBytes<32>, ) -> impl Future<Output = Result<Option<Vec<TransactionSigned>>, EthApiError>> + Send { ... } fn raw_transaction_by_hash( &self, hash: FixedBytes<32>, ) -> impl Future<Output = Result<Option<Bytes>, EthApiError>> + Send { ... } fn historical_transaction_by_hash_at( &self, hash: FixedBytes<32>, ) -> impl Future<Output = Result<Option<(TransactionSource, FixedBytes<32>)>, EthApiError>> + Send { ... } fn transaction_receipt( &self, hash: FixedBytes<32>, ) -> impl Future<Output = Result<Option<WithOtherFields<TransactionReceipt<AnyReceiptEnvelope<Log>>>>, EthApiError>> + Send where Self: LoadReceipt + 'static { ... } fn load_transaction_and_receipt( &self, hash: FixedBytes<32>, ) -> impl Future<Output = Result<Option<(TransactionSigned, TransactionMeta, Receipt)>, EthApiError>> + Send where Self: 'static { ... } fn transaction_by_block_and_tx_index( &self, block_id: BlockId, index: usize, ) -> impl Future<Output = Result<Option<Transaction>, EthApiError>> + Send where Self: LoadBlock { ... } fn raw_transaction_by_block_and_tx_index( &self, block_id: BlockId, index: usize, ) -> impl Future<Output = Result<Option<Bytes>, EthApiError>> + Send where Self: LoadBlock { ... } fn send_raw_transaction( &self, tx: Bytes, ) -> impl Future<Output = Result<FixedBytes<32>, EthApiError>> + Send { ... } fn send_transaction( &self, request: TransactionRequest, ) -> impl Future<Output = Result<FixedBytes<32>, EthApiError>> + Send where Self: EthApiSpec + LoadBlock + LoadPendingBlock + LoadFee + Call { ... } fn sign_request( &self, from: &Address, request: TypedTransactionRequest, ) -> Result<TransactionSigned, EthApiError> { ... } fn sign( &self, account: Address, message: Bytes, ) -> impl Future<Output = Result<Bytes, EthApiError>> + Send { ... } fn sign_typed_data( &self, data: &TypedData, account: Address, ) -> Result<Bytes, EthApiError> { ... } fn find_signer( &self, account: &Address, ) -> Result<Box<dyn EthSigner>, SignError> { ... }
}
Expand description

Transaction related functions for the EthApiServer trait in the eth_ namespace.

This includes utilities for transaction tracing, transacting and inspection.

Async functions that are spawned onto the BlockingTaskPool begin with spawn_

§Calls

There are subtle differences between when transacting TransactionRequest:

The endpoints eth_call and eth_estimateGas and eth_createAccessList should always disable the base fee check in the EnvWithHandlerCfg.

The behaviour for tracing endpoints is not consistent across clients. Geth also disables the basefee check for tracing: https://github.com/ethereum/go-ethereum/blob/bc0b87ca196f92e5af49bd33cc190ef0ec32b197/eth/tracers/api.go#L955-L955 Erigon does not: https://github.com/ledgerwatch/erigon/blob/aefb97b07d1c4fd32a66097a24eddd8f6ccacae0/turbo/transactions/tracing.go#L209-L209

See also https://github.com/paradigmxyz/reth/issues/6240

This implementation follows the behaviour of Geth and disables the basefee check for tracing.

Required Methods§

source

fn provider(&self) -> impl BlockReaderIdExt

Returns a handle for reading data from disk.

Data access in default (L1) trait method implementations.

source

fn raw_tx_forwarder(&self) -> Option<Arc<dyn RawTransactionForwarder>>

Returns a handle for forwarding received raw transactions.

Access to transaction forwarder in default (L1) trait method implementations.

source

fn signers(&self) -> &RwLock<RawRwLock, Vec<Box<dyn EthSigner>>>

Returns a handle for signing data.

Singer access in default (L1) trait method implementations.

Provided Methods§

source

fn transaction_by_hash( &self, hash: FixedBytes<32>, ) -> impl Future<Output = Result<Option<TransactionSource>, EthApiError>> + Send

Returns the transaction by hash.

Checks the pool and state.

Returns Ok(None) if no matching transaction was found.

source

fn transactions_by_block( &self, block: FixedBytes<32>, ) -> impl Future<Output = Result<Option<Vec<TransactionSigned>>, EthApiError>> + Send

Get all transactions in the block with the given hash.

Returns None if block does not exist.

source

fn raw_transaction_by_hash( &self, hash: FixedBytes<32>, ) -> impl Future<Output = Result<Option<Bytes>, EthApiError>> + Send

Returns the EIP-2718 encoded transaction by hash.

If this is a pooled EIP-4844 transaction, the blob sidecar is included.

Checks the pool and state.

Returns Ok(None) if no matching transaction was found.

source

fn historical_transaction_by_hash_at( &self, hash: FixedBytes<32>, ) -> impl Future<Output = Result<Option<(TransactionSource, FixedBytes<32>)>, EthApiError>> + Send

Returns the historical transaction and the block it was mined in

source

fn transaction_receipt( &self, hash: FixedBytes<32>, ) -> impl Future<Output = Result<Option<WithOtherFields<TransactionReceipt<AnyReceiptEnvelope<Log>>>>, EthApiError>> + Send
where Self: LoadReceipt + 'static,

Returns the transaction receipt for the given hash.

Returns None if the transaction does not exist or is pending Note: The tx receipt is not available for pending transactions.

source

fn load_transaction_and_receipt( &self, hash: FixedBytes<32>, ) -> impl Future<Output = Result<Option<(TransactionSigned, TransactionMeta, Receipt)>, EthApiError>> + Send
where Self: 'static,

Helper method that loads a transaction and its receipt.

source

fn transaction_by_block_and_tx_index( &self, block_id: BlockId, index: usize, ) -> impl Future<Output = Result<Option<Transaction>, EthApiError>> + Send
where Self: LoadBlock,

Get Transaction by BlockId and index of transaction within that block.

Returns Ok(None) if the block does not exist, or index is out of range.

source

fn raw_transaction_by_block_and_tx_index( &self, block_id: BlockId, index: usize, ) -> impl Future<Output = Result<Option<Bytes>, EthApiError>> + Send
where Self: LoadBlock,

Get transaction, as raw bytes, by BlockId and index of transaction within that block.

Returns Ok(None) if the block does not exist, or index is out of range.

source

fn send_raw_transaction( &self, tx: Bytes, ) -> impl Future<Output = Result<FixedBytes<32>, EthApiError>> + Send

Decodes and recovers the transaction and submits it to the pool.

Returns the hash of the transaction.

source

fn send_transaction( &self, request: TransactionRequest, ) -> impl Future<Output = Result<FixedBytes<32>, EthApiError>> + Send

Signs transaction with a matching signer, if any and submits the transaction to the pool. Returns the hash of the signed transaction.

source

fn sign_request( &self, from: &Address, request: TypedTransactionRequest, ) -> Result<TransactionSigned, EthApiError>

Signs a transaction, with configured signers.

source

fn sign( &self, account: Address, message: Bytes, ) -> impl Future<Output = Result<Bytes, EthApiError>> + Send

Signs given message. Returns the signature.

source

fn sign_typed_data( &self, data: &TypedData, account: Address, ) -> Result<Bytes, EthApiError>

Encodes and signs the typed data according EIP-712. Payload must implement Eip712 trait.

source

fn find_signer( &self, account: &Address, ) -> Result<Box<dyn EthSigner>, SignError>

Returns the signer for the given account, if found in configured signers.

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<Provider, Pool, Network, EvmConfig> EthTransactions for EthApi<Provider, Pool, Network, EvmConfig>
where EthApi<Provider, Pool, Network, EvmConfig>: LoadTransaction, Pool: TransactionPool + 'static, Provider: BlockReaderIdExt,