Trait Transaction

pub trait Transaction {
    type AccessListItem<'a>: AccessListItemTr
       where Self: 'a;
    type Authorization<'a>: AuthorizationTr
       where Self: 'a;

Show 21 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<impl Iterator<Item = Self::AccessListItem<'_>>>; 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 { ... } fn max_balance_spending(&self) -> Result<Uint<256, 4>, InvalidTransaction> { ... } fn effective_balance_spending( &self, base_fee: u128, blob_price: u128, ) -> Result<Uint<256, 4>, InvalidTransaction> { ... }
}
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§

type AccessListItem<'a>: AccessListItemTr where Self: 'a

type Authorization<'a>: AuthorizationTr where Self: 'a

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][primitives::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<impl Iterator<Item = Self::AccessListItem<'_>>>

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.

fn max_balance_spending(&self) -> Result<Uint<256, 4>, InvalidTransaction>

Returns the maximum balance that can be spent by the transaction.

Return U256 or error if all values overflow U256 number.

fn effective_balance_spending( &self, base_fee: u128, blob_price: u128, ) -> Result<Uint<256, 4>, InvalidTransaction>

Returns the effective balance that is going to be spent that depends on base_fee

This is always strictly less than Self::max_balance_spending.

Return U256 or error if all values overflow U256 number.

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<'b, T> Transaction for &'b T
where T: 'b + Transaction + ?Sized,

§

type AccessListItem<'a> = <T as Transaction>::AccessListItem<'a> where &'b T: 'a

§

type Authorization<'a> = <T as Transaction>::Authorization<'a> where &'b T: 'a

§

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<impl Iterator<Item = <&'b T as Transaction>::AccessListItem<'_>>>

§

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 = <&'b 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

§

fn max_balance_spending(&self) -> Result<Uint<256, 4>, InvalidTransaction>

§

fn effective_balance_spending( &self, base_fee: u128, blob_price: u128, ) -> Result<Uint<256, 4>, InvalidTransaction>

§

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

§

type AccessListItem<'a> = <T as Transaction>::AccessListItem<'a> where Box<T>: 'a

§

type Authorization<'a> = <T as Transaction>::Authorization<'a> where Box<T>: 'a

§

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<impl Iterator<Item = <Box<T> as Transaction>::AccessListItem<'_>>>

§

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

§

fn max_balance_spending(&self) -> Result<Uint<256, 4>, InvalidTransaction>

§

fn effective_balance_spending( &self, base_fee: u128, blob_price: u128, ) -> Result<Uint<256, 4>, InvalidTransaction>

§

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

§

type AccessListItem<'a> = <T as Transaction>::AccessListItem<'a> where Rc<T>: 'a

§

type Authorization<'a> = <T as Transaction>::Authorization<'a> where Rc<T>: 'a

§

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<impl Iterator<Item = <Rc<T> as Transaction>::AccessListItem<'_>>>

§

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

§

fn max_balance_spending(&self) -> Result<Uint<256, 4>, InvalidTransaction>

§

fn effective_balance_spending( &self, base_fee: u128, blob_price: u128, ) -> Result<Uint<256, 4>, InvalidTransaction>

§

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

§

type AccessListItem<'a> = <T as Transaction>::AccessListItem<'a> where Arc<T>: 'a

§

type Authorization<'a> = <T as Transaction>::Authorization<'a> where Arc<T>: 'a

§

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<impl Iterator<Item = <Arc<T> as Transaction>::AccessListItem<'_>>>

§

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

§

fn max_balance_spending(&self) -> Result<Uint<256, 4>, InvalidTransaction>

§

fn effective_balance_spending( &self, base_fee: u128, blob_price: u128, ) -> Result<Uint<256, 4>, InvalidTransaction>

Implementors§