Skip to content

Commit

Permalink
tx-pool: mv ensure_intrinsic_gas impl to EthPoolTransaction trait
Browse files Browse the repository at this point in the history
  • Loading branch information
tcoratger committed Oct 23, 2024
1 parent 5e0ba41 commit ae3d79c
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 35 deletions.
33 changes: 32 additions & 1 deletion crates/transaction-pool/src/traits.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use crate::{
blobstore::BlobStoreError,
error::{InvalidPoolTransactionError, PoolResult},
pool::{state::SubPool, BestTransactionFilter, TransactionEvents},
validate::ValidPoolTransaction,
validate::{ForkTracker, ValidPoolTransaction},
AllTransactionsEvents,
};
use alloy_consensus::{
Expand All @@ -21,6 +21,7 @@ use reth_primitives::{
BlobTransactionValidationError, PooledTransactionsElement,
PooledTransactionsElementEcRecovered, SealedBlock, Transaction, TransactionSignedEcRecovered,
};
use revm::{interpreter::gas::validate_initial_tx_gas, primitives::SpecId};
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use std::{
Expand Down Expand Up @@ -1005,6 +1006,36 @@ pub trait EthPoolTransaction:

/// Returns the number of authorizations this transaction has.
fn authorization_count(&self) -> usize;

/// Ensures that gas limit of the transaction exceeds the intrinsic gas of the transaction.
///
/// Caution: This only checks past the Merge hardfork.
fn ensure_intrinsic_gas(
&self,
fork_tracker: &ForkTracker,
) -> Result<(), InvalidPoolTransactionError> {
let spec_id = if fork_tracker.is_prague_activated() {
SpecId::PRAGUE
} else if fork_tracker.is_shanghai_activated() {
SpecId::SHANGHAI
} else {
SpecId::MERGE
};

let gas_after_merge = validate_initial_tx_gas(
spec_id,
self.input(),
self.kind().is_create(),
self.access_list().map(|list| list.0.as_slice()).unwrap_or(&[]),
self.authorization_count() as u64,
);

if self.gas_limit() < gas_after_merge {
Err(InvalidPoolTransactionError::IntrinsicGasTooLow)
} else {
Ok(())
}
}
}

/// The default [`PoolTransaction`] for the [Pool](crate::Pool) for Ethereum.
Expand Down
65 changes: 31 additions & 34 deletions crates/transaction-pool/src/validate/eth.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,7 @@ use reth_primitives::{
};
use reth_storage_api::{AccountReader, StateProviderFactory};
use reth_tasks::TaskSpawner;
use revm::{
interpreter::gas::validate_initial_tx_gas,
primitives::{EnvKzgSettings, SpecId},
};
use revm::primitives::EnvKzgSettings;
use std::{
marker::PhantomData,
sync::{atomic::AtomicBool, Arc},
Expand Down Expand Up @@ -287,7 +284,7 @@ where
}
}

if let Err(err) = ensure_intrinsic_gas(&transaction, &self.fork_tracker) {
if let Err(err) = transaction.ensure_intrinsic_gas(&self.fork_tracker) {
return TransactionValidationOutcome::Invalid(transaction, err)
}

Expand Down Expand Up @@ -783,35 +780,35 @@ impl ForkTracker {
}
}

/// Ensures that gas limit of the transaction exceeds the intrinsic gas of the transaction.
///
/// Caution: This only checks past the Merge hardfork.
pub fn ensure_intrinsic_gas<T: EthPoolTransaction>(
transaction: &T,
fork_tracker: &ForkTracker,
) -> Result<(), InvalidPoolTransactionError> {
let spec_id = if fork_tracker.is_prague_activated() {
SpecId::PRAGUE
} else if fork_tracker.is_shanghai_activated() {
SpecId::SHANGHAI
} else {
SpecId::MERGE
};

let gas_after_merge = validate_initial_tx_gas(
spec_id,
transaction.input(),
transaction.kind().is_create(),
transaction.access_list().map(|list| list.0.as_slice()).unwrap_or(&[]),
transaction.authorization_count() as u64,
);

if transaction.gas_limit() < gas_after_merge {
Err(InvalidPoolTransactionError::IntrinsicGasTooLow)
} else {
Ok(())
}
}
// /// Ensures that gas limit of the transaction exceeds the intrinsic gas of the transaction.
// ///
// /// Caution: This only checks past the Merge hardfork.
// pub fn ensure_intrinsic_gas<T: EthPoolTransaction>(
// transaction: &T,
// fork_tracker: &ForkTracker,
// ) -> Result<(), InvalidPoolTransactionError> {
// let spec_id = if fork_tracker.is_prague_activated() {
// SpecId::PRAGUE
// } else if fork_tracker.is_shanghai_activated() {
// SpecId::SHANGHAI
// } else {
// SpecId::MERGE
// };

// let gas_after_merge = validate_initial_tx_gas(
// spec_id,
// transaction.input(),
// transaction.kind().is_create(),
// transaction.access_list().map(|list| list.0.as_slice()).unwrap_or(&[]),
// transaction.authorization_count() as u64,
// );

// if transaction.gas_limit() < gas_after_merge {
// Err(InvalidPoolTransactionError::IntrinsicGasTooLow)
// } else {
// Ok(())
// }
// }

#[cfg(test)]
mod tests {
Expand Down

0 comments on commit ae3d79c

Please sign in to comment.