mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 19:09:54 +00:00
feat: add eip 4844 blob tx type (#3807)
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
@ -88,7 +88,7 @@ pub use transaction::{
|
|||||||
AccessList, AccessListItem, AccessListWithGasUsed, FromRecoveredTransaction,
|
AccessList, AccessListItem, AccessListWithGasUsed, FromRecoveredTransaction,
|
||||||
IntoRecoveredTransaction, InvalidTransactionError, Signature, Transaction, TransactionKind,
|
IntoRecoveredTransaction, InvalidTransactionError, Signature, Transaction, TransactionKind,
|
||||||
TransactionMeta, TransactionSigned, TransactionSignedEcRecovered, TransactionSignedNoHash,
|
TransactionMeta, TransactionSigned, TransactionSignedEcRecovered, TransactionSignedNoHash,
|
||||||
TxEip1559, TxEip2930, TxLegacy, TxType, EIP1559_TX_TYPE_ID, EIP2930_TX_TYPE_ID,
|
TxEip1559, TxEip2930, TxEip4844, TxLegacy, TxType, EIP1559_TX_TYPE_ID, EIP2930_TX_TYPE_ID,
|
||||||
LEGACY_TX_TYPE_ID,
|
LEGACY_TX_TYPE_ID,
|
||||||
};
|
};
|
||||||
pub use withdrawal::Withdrawal;
|
pub use withdrawal::Withdrawal;
|
||||||
|
|||||||
@ -215,6 +215,87 @@ impl TxEip1559 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A transaction with blob hashes and max blob fee
|
||||||
|
#[main_codec]
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
|
||||||
|
pub struct TxEip4844 {
|
||||||
|
/// Added as EIP-pub 155: Simple replay attack protection
|
||||||
|
pub chain_id: u64,
|
||||||
|
/// A scalar value equal to the number of transactions sent by the sender; formally Tn.
|
||||||
|
pub nonce: u64,
|
||||||
|
/// A scalar value equal to the maximum
|
||||||
|
/// amount of gas that should be used in executing
|
||||||
|
/// this transaction. This is paid up-front, before any
|
||||||
|
/// computation is done and may not be increased
|
||||||
|
/// later; formally Tg.
|
||||||
|
pub gas_limit: u64,
|
||||||
|
/// A scalar value equal to the maximum
|
||||||
|
/// amount of gas that should be used in executing
|
||||||
|
/// this transaction. This is paid up-front, before any
|
||||||
|
/// computation is done and may not be increased
|
||||||
|
/// later; formally Tg.
|
||||||
|
///
|
||||||
|
/// As ethereum circulation is around 120mil eth as of 2022 that is around
|
||||||
|
/// 120000000000000000000000000 wei we are safe to use u128 as its max number is:
|
||||||
|
/// 340282366920938463463374607431768211455
|
||||||
|
pub max_fee_per_gas: u128,
|
||||||
|
/// Max Priority fee that transaction is paying
|
||||||
|
///
|
||||||
|
/// As ethereum circulation is around 120mil eth as of 2022 that is around
|
||||||
|
/// 120000000000000000000000000 wei we are safe to use u128 as its max number is:
|
||||||
|
/// 340282366920938463463374607431768211455
|
||||||
|
pub max_priority_fee_per_gas: u128,
|
||||||
|
/// The 160-bit address of the message call’s recipient or, for a contract creation
|
||||||
|
/// transaction, ∅, used here to denote the only member of B0 ; formally Tt.
|
||||||
|
pub to: TransactionKind,
|
||||||
|
/// A scalar value equal to the number of Wei to
|
||||||
|
/// be transferred to the message call’s recipient or,
|
||||||
|
/// in the case of contract creation, as an endowment
|
||||||
|
/// to the newly created account; formally Tv.
|
||||||
|
///
|
||||||
|
/// As ethereum circulation is around 120mil eth as of 2022 that is around
|
||||||
|
/// 120000000000000000000000000 wei we are safe to use u128 as its max number is:
|
||||||
|
/// 340282366920938463463374607431768211455
|
||||||
|
pub value: u128,
|
||||||
|
/// The accessList specifies a list of addresses and storage keys;
|
||||||
|
/// these addresses and storage keys are added into the `accessed_addresses`
|
||||||
|
/// and `accessed_storage_keys` global sets (introduced in EIP-2929).
|
||||||
|
/// A gas cost is charged, though at a discount relative to the cost of
|
||||||
|
/// accessing outside the list.
|
||||||
|
pub access_list: AccessList,
|
||||||
|
|
||||||
|
/// It contains a vector of fixed size hash(32 bytes)
|
||||||
|
pub blob_hashes: Vec<H256>,
|
||||||
|
|
||||||
|
/// Max fee per data gas
|
||||||
|
pub max_fee_per_blob: u128,
|
||||||
|
|
||||||
|
/// Input has two uses depending if transaction is Create or Call (if `to` field is None or
|
||||||
|
/// Some). pub init: An unlimited size byte array specifying the
|
||||||
|
/// EVM-code for the account initialisation procedure CREATE,
|
||||||
|
/// data: An unlimited size byte array specifying the
|
||||||
|
/// input data of the message call, formally Td.
|
||||||
|
pub input: Bytes,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TxEip4844 {
|
||||||
|
/// Calculates a heuristic for the in-memory size of the [TxEip4844] transaction.
|
||||||
|
#[inline]
|
||||||
|
pub fn size(&self) -> usize {
|
||||||
|
mem::size_of::<ChainId>() + // chain_id
|
||||||
|
mem::size_of::<u64>() + // nonce
|
||||||
|
mem::size_of::<u64>() + // gas_limit
|
||||||
|
mem::size_of::<u128>() + // max_fee_per_gas
|
||||||
|
mem::size_of::<u128>() + // max_priority_fee_per_gas
|
||||||
|
self.to.size() + // to
|
||||||
|
mem::size_of::<u128>() + // value
|
||||||
|
self.access_list.size() + // access_list
|
||||||
|
self.input.len() + // input
|
||||||
|
self.blob_hashes.capacity() * mem::size_of::<H256>() + // blob hashes size
|
||||||
|
mem::size_of::<u128>() // blob fee cap
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A raw transaction.
|
/// A raw transaction.
|
||||||
///
|
///
|
||||||
/// Transaction types were introduced in [EIP-2718](https://eips.ethereum.org/EIPS/eip-2718).
|
/// Transaction types were introduced in [EIP-2718](https://eips.ethereum.org/EIPS/eip-2718).
|
||||||
|
|||||||
Reference in New Issue
Block a user