From 3413343caad98323566c53b7f2d70555fe5427b0 Mon Sep 17 00:00:00 2001 From: POA <33550681+poa@users.noreply.github.com> Date: Fri, 24 Sep 2021 14:53:17 +0300 Subject: [PATCH] Add service transactions support for EIP-1559 --- crates/concensus/miner/src/pool/mod.rs | 4 ++++ crates/ethcore/src/executive.rs | 2 +- crates/ethcore/src/machine/impls.rs | 2 +- crates/transaction-pool/src/lib.rs | 3 +++ crates/transaction-pool/src/pool.rs | 4 ++-- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/crates/concensus/miner/src/pool/mod.rs b/crates/concensus/miner/src/pool/mod.rs index 257f20983..12bfdfa4e 100644 --- a/crates/concensus/miner/src/pool/mod.rs +++ b/crates/concensus/miner/src/pool/mod.rs @@ -188,6 +188,10 @@ impl txpool::VerifiedTransaction for VerifiedTransaction { fn sender(&self) -> &Address { &self.sender } + + fn is_service(&self) -> bool { + self.transaction.is_service() + } } impl ScoredTransaction for VerifiedTransaction { diff --git a/crates/ethcore/src/executive.rs b/crates/ethcore/src/executive.rs index 0ddbc6fc9..59539924e 100644 --- a/crates/ethcore/src/executive.rs +++ b/crates/ethcore/src/executive.rs @@ -1207,7 +1207,7 @@ impl<'a, B: 'a + StateBackend> Executive<'a, B> { } // ensure that the user was willing to at least pay the base fee - if t.tx().gas_price < self.info.base_fee.unwrap_or_default() { + if t.tx().gas_price < self.info.base_fee.unwrap_or_default() && !t.is_service() { return Err(ExecutionError::GasPriceLowerThanBaseFee { gas_price: t.tx().gas_price, base_fee: self.info.base_fee.unwrap_or_default(), diff --git a/crates/ethcore/src/machine/impls.rs b/crates/ethcore/src/machine/impls.rs index 1f0a6464c..066d50c96 100644 --- a/crates/ethcore/src/machine/impls.rs +++ b/crates/ethcore/src/machine/impls.rs @@ -376,7 +376,7 @@ impl EthereumMachine { header: &Header, ) -> Result { // ensure that the user was willing to at least pay the base fee - if t.tx().gas_price < header.base_fee().unwrap_or_default() { + if t.tx().gas_price < header.base_fee().unwrap_or_default() && !t.is_service() { return Err(transaction::Error::GasPriceLowerThanBaseFee { gas_price: t.tx().gas_price, base_fee: header.base_fee().unwrap_or_default(), diff --git a/crates/transaction-pool/src/lib.rs b/crates/transaction-pool/src/lib.rs index a15be0509..20541da1d 100644 --- a/crates/transaction-pool/src/lib.rs +++ b/crates/transaction-pool/src/lib.rs @@ -113,4 +113,7 @@ pub trait VerifiedTransaction: fmt::Debug { /// Transaction sender fn sender(&self) -> &Self::Sender; + + /// Is it a service transaction? + fn is_service(&self) -> bool; } diff --git a/crates/transaction-pool/src/pool.rs b/crates/transaction-pool/src/pool.rs index 8ba64ea7b..7df84cc05 100644 --- a/crates/transaction-pool/src/pool.rs +++ b/crates/transaction-pool/src/pool.rs @@ -650,7 +650,7 @@ where match self.ready.is_ready(&tx) { Readiness::Ready => { //return transaction with score higher or equal to desired - if score >= &self.includable_boundary { + if score >= &self.includable_boundary || tx.transaction.is_service() { return Some(tx.transaction.clone()); } } @@ -737,7 +737,7 @@ where if tx_state == Readiness::Ready { //return transaction with score higher or equal to desired - if best.score >= self.includable_boundary { + if best.score >= self.includable_boundary || best.transaction.transaction.is_service() { return Some(best.transaction.transaction); } }