Trait Transaction

pub trait Transaction {
    type AccessList: AccessListTr;
    type Authorization: AuthorizationTr;

Show 19 methods // Required methods fn tx_type(&self) -> u8; fn caller(&self) -> Address; fn gas_limit(&self) -> u64; fn value(&self) -> Uint<256, 4>; fn input(&self) -> &Bytes; fn nonce(&self) -> u64; fn kind(&self) -> TxKind; fn chain_id(&self) -> Option<u64>; fn gas_price(&self) -> u128; fn access_list(&self) -> Option<&Self::AccessList>; fn blob_versioned_hashes(&self) -> &[FixedBytes<32>]; fn max_fee_per_blob_gas(&self) -> u128; fn authorization_list_len(&self) -> usize; fn authorization_list(&self) -> impl Iterator<Item = &Self::Authorization>; fn max_priority_fee_per_gas(&self) -> Option<u128>; // Provided methods fn total_blob_gas(&self) -> u64 { ... } fn calc_max_data_fee(&self) -> Uint<256, 4> { ... } fn max_fee_per_gas(&self) -> u128 { ... } fn effective_gas_price(&self, base_fee: u128) -> u128 { ... }
}
Expand description

Main Transaction trait that abstracts and specifies all transaction currently supported by Ethereum

Access to any associated type is gaited behind tx_type function.

It can be extended to support new transaction types and only transaction types can be deprecated by not returning tx_type.

Required Associated Types§

Required Methods§

fn tx_type(&self) -> u8

Returns the transaction type.

Depending on this field other functions should be called.

fn caller(&self) -> Address

Caller aka Author aka transaction signer.

Note : Common field for all transactions.

fn gas_limit(&self) -> u64

The maximum amount of gas the transaction can use.

Note : Common field for all transactions.

fn value(&self) -> Uint<256, 4>

The value sent to the receiver of TxKind::Call.

Note : Common field for all transactions.

fn input(&self) -> &Bytes

Returns the input data of the transaction.

Note : Common field for all transactions.

fn nonce(&self) -> u64

The nonce of the transaction.

Note : Common field for all transactions.

fn kind(&self) -> TxKind

Transaction kind. It can be Call or Create.

Kind is applicable for: Legacy, EIP-2930, EIP-1559 And is Call for EIP-4844 and EIP-7702 transactions.

fn chain_id(&self) -> Option<u64>

Chain Id is optional for legacy transactions.

As it was introduced in EIP-155.

fn gas_price(&self) -> u128

Gas price for the transaction. It is only applicable for Legacy and EIP-2930 transactions. For Eip1559 it is max_fee_per_gas.

fn access_list(&self) -> Option<&Self::AccessList>

Access list for the transaction.

Introduced in EIP-2930.

fn blob_versioned_hashes(&self) -> &[FixedBytes<32>]

Returns vector of fixed size hash(32 bytes)

Note : EIP-4844 transaction field.

fn max_fee_per_blob_gas(&self) -> u128

Max fee per data gas

Note : EIP-4844 transaction field.

fn authorization_list_len(&self) -> usize

Returns length of the authorization list.

§Note

Transaction is considered invalid if list is empty.

fn authorization_list(&self) -> impl Iterator<Item = &Self::Authorization>

List of authorizations, that contains the signature that authorizes this caller to place the code to signer account.

Set EOA account code for one transaction

EIP-Set EOA account code for one transaction

fn max_priority_fee_per_gas(&self) -> Option<u128>

Maximum priority fee per gas.

Provided Methods§

fn total_blob_gas(&self) -> u64

Total gas for all blobs. Max number of blocks is already checked so we dont need to check for overflow.

fn calc_max_data_fee(&self) -> Uint<256, 4>

Calculates the maximum [EIP-4844] data_fee of the transaction.

This is used for ensuring that the user has at least enough funds to pay the max_fee_per_blob_gas * total_blob_gas, on top of regular gas costs.

See EIP-4844: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md#execution-layer-validation

fn max_fee_per_gas(&self) -> u128

Returns maximum fee that can be paid for the transaction.

fn effective_gas_price(&self, base_fee: u128) -> u128

Returns effective gas price is gas price field for Legacy and Eip2930 transaction.

While for transactions after Eip1559 it is minimum of max_fee and base + max_priority_fee.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

§

impl<'a, T> Transaction for &'a T
where T: 'a + Transaction + ?Sized,

§

type AccessList = <T as Transaction>::AccessList

§

type Authorization = <T as Transaction>::Authorization

§

fn tx_type(&self) -> u8

§

fn caller(&self) -> Address

§

fn gas_limit(&self) -> u64

§

fn value(&self) -> Uint<256, 4>

§

fn input(&self) -> &Bytes

§

fn nonce(&self) -> u64

§

fn kind(&self) -> TxKind

§

fn chain_id(&self) -> Option<u64>

§

fn gas_price(&self) -> u128

§

fn access_list(&self) -> Option<&<&'a T as Transaction>::AccessList>

§

fn blob_versioned_hashes(&self) -> &[FixedBytes<32>]

§

fn max_fee_per_blob_gas(&self) -> u128

§

fn total_blob_gas(&self) -> u64

§

fn calc_max_data_fee(&self) -> Uint<256, 4>

§

fn authorization_list_len(&self) -> usize

§

fn authorization_list( &self, ) -> impl Iterator<Item = &<&'a T as Transaction>::Authorization>

§

fn max_fee_per_gas(&self) -> u128

§

fn max_priority_fee_per_gas(&self) -> Option<u128>

§

fn effective_gas_price(&self, base_fee: u128) -> u128

§

impl<T> Transaction for Box<T>
where T: Transaction + ?Sized,

§

type AccessList = <T as Transaction>::AccessList

§

type Authorization = <T as Transaction>::Authorization

§

fn tx_type(&self) -> u8

§

fn caller(&self) -> Address

§

fn gas_limit(&self) -> u64

§

fn value(&self) -> Uint<256, 4>

§

fn input(&self) -> &Bytes

§

fn nonce(&self) -> u64

§

fn kind(&self) -> TxKind

§

fn chain_id(&self) -> Option<u64>

§

fn gas_price(&self) -> u128

§

fn access_list(&self) -> Option<&<Box<T> as Transaction>::AccessList>

§

fn blob_versioned_hashes(&self) -> &[FixedBytes<32>]

§

fn max_fee_per_blob_gas(&self) -> u128

§

fn total_blob_gas(&self) -> u64

§

fn calc_max_data_fee(&self) -> Uint<256, 4>

§

fn authorization_list_len(&self) -> usize

§

fn authorization_list( &self, ) -> impl Iterator<Item = &<Box<T> as Transaction>::Authorization>

§

fn max_fee_per_gas(&self) -> u128

§

fn max_priority_fee_per_gas(&self) -> Option<u128>

§

fn effective_gas_price(&self, base_fee: u128) -> u128

§

impl<T> Transaction for Rc<T>
where T: Transaction + ?Sized,

§

type AccessList = <T as Transaction>::AccessList

§

type Authorization = <T as Transaction>::Authorization

§

fn tx_type(&self) -> u8

§

fn caller(&self) -> Address

§

fn gas_limit(&self) -> u64

§

fn value(&self) -> Uint<256, 4>

§

fn input(&self) -> &Bytes

§

fn nonce(&self) -> u64

§

fn kind(&self) -> TxKind

§

fn chain_id(&self) -> Option<u64>

§

fn gas_price(&self) -> u128

§

fn access_list(&self) -> Option<&<Rc<T> as Transaction>::AccessList>

§

fn blob_versioned_hashes(&self) -> &[FixedBytes<32>]

§

fn max_fee_per_blob_gas(&self) -> u128

§

fn total_blob_gas(&self) -> u64

§

fn calc_max_data_fee(&self) -> Uint<256, 4>

§

fn authorization_list_len(&self) -> usize

§

fn authorization_list( &self, ) -> impl Iterator<Item = &<Rc<T> as Transaction>::Authorization>

§

fn max_fee_per_gas(&self) -> u128

§

fn max_priority_fee_per_gas(&self) -> Option<u128>

§

fn effective_gas_price(&self, base_fee: u128) -> u128

§

impl<T> Transaction for Arc<T>
where T: Transaction + ?Sized,

§

type AccessList = <T as Transaction>::AccessList

§

type Authorization = <T as Transaction>::Authorization

§

fn tx_type(&self) -> u8

§

fn caller(&self) -> Address

§

fn gas_limit(&self) -> u64

§

fn value(&self) -> Uint<256, 4>

§

fn input(&self) -> &Bytes

§

fn nonce(&self) -> u64

§

fn kind(&self) -> TxKind

§

fn chain_id(&self) -> Option<u64>

§

fn gas_price(&self) -> u128

§

fn access_list(&self) -> Option<&<Arc<T> as Transaction>::AccessList>

§

fn blob_versioned_hashes(&self) -> &[FixedBytes<32>]

§

fn max_fee_per_blob_gas(&self) -> u128

§

fn total_blob_gas(&self) -> u64

§

fn calc_max_data_fee(&self) -> Uint<256, 4>

§

fn authorization_list_len(&self) -> usize

§

fn authorization_list( &self, ) -> impl Iterator<Item = &<Arc<T> as Transaction>::Authorization>

§

fn max_fee_per_gas(&self) -> u128

§

fn max_priority_fee_per_gas(&self) -> Option<u128>

§

fn effective_gas_price(&self, base_fee: u128) -> u128

§

impl<T> Transaction for OpTransaction<T>
where T: Transaction,

§

type AccessList = <T as Transaction>::AccessList

§

type Authorization = <T as Transaction>::Authorization

§

fn tx_type(&self) -> u8

§

fn caller(&self) -> Address

§

fn gas_limit(&self) -> u64

§

fn value(&self) -> Uint<256, 4>

§

fn input(&self) -> &Bytes

§

fn nonce(&self) -> u64

§

fn kind(&self) -> TxKind

§

fn chain_id(&self) -> Option<u64>

§

fn access_list(&self) -> Option<&<OpTransaction<T> as Transaction>::AccessList>

§

fn max_priority_fee_per_gas(&self) -> Option<u128>

§

fn max_fee_per_gas(&self) -> u128

§

fn gas_price(&self) -> u128

§

fn blob_versioned_hashes(&self) -> &[FixedBytes<32>]

§

fn max_fee_per_blob_gas(&self) -> u128

§

fn effective_gas_price(&self, base_fee: u128) -> u128

§

fn authorization_list_len(&self) -> usize

§

fn authorization_list( &self, ) -> impl Iterator<Item = &<OpTransaction<T> as Transaction>::Authorization>

Implementors§