From af33394388a2618d2183542751638b89e13833fa Mon Sep 17 00:00:00 2001 From: Anton Gavrilov Date: Wed, 7 Aug 2019 18:47:52 +0200 Subject: [PATCH 1/4] Verify transaction against its block during import --- ethcore/src/miner/miner.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ethcore/src/miner/miner.rs b/ethcore/src/miner/miner.rs index 11c9767990f..466c4c8db54 100644 --- a/ethcore/src/miner/miner.rs +++ b/ethcore/src/miner/miner.rs @@ -513,6 +513,10 @@ impl Miner { // Re-verify transaction again vs current state. let result = client.verify_signed(&transaction) + .map_err(|e| e.into()) + .and_then(|_| { + self.engine.machine().verify_transaction_basic(&transaction, &open_block.header) + }) .map_err(|e| e.into()) .and_then(|_| { open_block.push_transaction(transaction, None) From 64aad44230d76b721abccd66aa59676b3eab2648 Mon Sep 17 00:00:00 2001 From: Anton Gavrilov Date: Thu, 8 Aug 2019 11:10:11 +0200 Subject: [PATCH 2/4] Client method for transaction verification added --- ethcore/src/miner/miner.rs | 4 ++-- ethcore/src/miner/pool_client.rs | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ethcore/src/miner/miner.rs b/ethcore/src/miner/miner.rs index 466c4c8db54..dc1f41f919d 100644 --- a/ethcore/src/miner/miner.rs +++ b/ethcore/src/miner/miner.rs @@ -512,10 +512,10 @@ impl Miner { let sender = transaction.sender(); // Re-verify transaction again vs current state. - let result = client.verify_signed(&transaction) + let result = client.verify_for_pending_block(&transaction, &open_block.header) .map_err(|e| e.into()) .and_then(|_| { - self.engine.machine().verify_transaction_basic(&transaction, &open_block.header) + client.verify_signed(&transaction) }) .map_err(|e| e.into()) .and_then(|_| { diff --git a/ethcore/src/miner/pool_client.rs b/ethcore/src/miner/pool_client.rs index c87e307f024..7d44bd80777 100644 --- a/ethcore/src/miner/pool_client.rs +++ b/ethcore/src/miner/pool_client.rs @@ -120,6 +120,11 @@ impl<'a, C: 'a> PoolClient<'a, C> where pub fn verify_signed(&self, tx: &SignedTransaction) -> Result<(), transaction::Error> { self.engine.machine().verify_transaction(&tx, &self.best_block_header, self.chain) } + + /// Verifies transaction against its block (before its import into this block) + pub fn verify_for_pending_block(&self, transaction: &UnverifiedTransaction, header: &Header) -> Result<(), transaction::Error> { + self.engine.machine().verify_transaction_basic(transaction, header) + } } impl<'a, C: 'a> fmt::Debug for PoolClient<'a, C> { From 8f6b8cc3b944b0f763921c2c5199a43a538afaef Mon Sep 17 00:00:00 2001 From: Anton Gavrilov Date: Tue, 13 Aug 2019 11:56:59 +0200 Subject: [PATCH 3/4] Verification methods united --- ethcore/src/miner/miner.rs | 4 ---- ethcore/src/miner/pool_client.rs | 18 ++++++------------ 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/ethcore/src/miner/miner.rs b/ethcore/src/miner/miner.rs index dc1f41f919d..766a75be3c9 100644 --- a/ethcore/src/miner/miner.rs +++ b/ethcore/src/miner/miner.rs @@ -513,10 +513,6 @@ impl Miner { // Re-verify transaction again vs current state. let result = client.verify_for_pending_block(&transaction, &open_block.header) - .map_err(|e| e.into()) - .and_then(|_| { - client.verify_signed(&transaction) - }) .map_err(|e| e.into()) .and_then(|_| { open_block.push_transaction(transaction, None) diff --git a/ethcore/src/miner/pool_client.rs b/ethcore/src/miner/pool_client.rs index 7d44bd80777..8a9021dc3c2 100644 --- a/ethcore/src/miner/pool_client.rs +++ b/ethcore/src/miner/pool_client.rs @@ -114,16 +114,13 @@ impl<'a, C: 'a> PoolClient<'a, C> where } } - /// Verifies if signed transaction is executable. + /// Verifies transaction against its block (before its import into this block) + /// Also Verifies if signed transaction is executable. /// /// This should perform any verifications that rely on chain status. - pub fn verify_signed(&self, tx: &SignedTransaction) -> Result<(), transaction::Error> { - self.engine.machine().verify_transaction(&tx, &self.best_block_header, self.chain) - } - - /// Verifies transaction against its block (before its import into this block) - pub fn verify_for_pending_block(&self, transaction: &UnverifiedTransaction, header: &Header) -> Result<(), transaction::Error> { - self.engine.machine().verify_transaction_basic(transaction, header) + pub fn verify_for_pending_block(&self, tx: &SignedTransaction, header: &Header) -> Result<(), transaction::Error> { + self.engine.machine().verify_transaction_basic(tx, header)?; + self.engine.machine().verify_transaction(tx, &self.best_block_header, self.chain) } } @@ -141,11 +138,8 @@ impl<'a, C: 'a> pool::client::Client for PoolClient<'a, C> where } fn verify_transaction(&self, tx: UnverifiedTransaction)-> Result { - self.engine.verify_transaction_basic(&tx, &self.best_block_header)?; let tx = tx.verify_unordered()?; - - self.verify_signed(&tx)?; - + self.verify_for_pending_block(&tx, &self.best_block_header)?; Ok(tx) } From 537d7255aa1aab69c1bb6f978d3bc771488da01f Mon Sep 17 00:00:00 2001 From: Anton Gavrilov Date: Tue, 13 Aug 2019 12:36:26 +0200 Subject: [PATCH 4/4] Verification sequence for transaction verifier returned --- ethcore/src/miner/pool_client.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ethcore/src/miner/pool_client.rs b/ethcore/src/miner/pool_client.rs index 8a9021dc3c2..f23a94874bb 100644 --- a/ethcore/src/miner/pool_client.rs +++ b/ethcore/src/miner/pool_client.rs @@ -138,8 +138,10 @@ impl<'a, C: 'a> pool::client::Client for PoolClient<'a, C> where } fn verify_transaction(&self, tx: UnverifiedTransaction)-> Result { + self.engine.verify_transaction_basic(&tx, &self.best_block_header)?; let tx = tx.verify_unordered()?; - self.verify_for_pending_block(&tx, &self.best_block_header)?; + + self.engine.machine().verify_transaction(&tx, &self.best_block_header, self.chain)?; Ok(tx) }