From 5e6018b20b95a8f83cd163c23644d2da7405b703 Mon Sep 17 00:00:00 2001 From: andri lim Date: Thu, 9 Jan 2020 13:51:54 +0700 Subject: [PATCH] [skip ci] collectTouchedAccounts reduction --- nimbus/p2p/executor.nim | 15 +++++++-------- nimbus/vm/computation.nim | 11 +---------- nimbus/vm_state_transactions.nim | 2 ++ 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/nimbus/p2p/executor.nim b/nimbus/p2p/executor.nim index 4b9626949..597dbb398 100644 --- a/nimbus/p2p/executor.nim +++ b/nimbus/p2p/executor.nim @@ -13,9 +13,6 @@ proc processTransaction*(tx: Transaction, sender: EthAddress, vmState: BaseVMSta trace "Sender", sender trace "txHash", rlpHash = tx.rlpHash - if fork >= FkSpurious: - vmState.touchedAccounts.incl(vmState.blockHeader.coinbase) - var gasUsed = tx.gasLimit var coinBaseSuicide = false @@ -61,11 +58,13 @@ proc processTransaction*(tx: Transaction, sender: EthAddress, vmState: BaseVMSta else: db.addBalance(vmState.blockHeader.coinbase, 0.u256) - # EIP158 state clearing - for account in vmState.touchedAccounts: - if db.accountExists(account) and db.isEmptyAccount(account): - debug "state clearing", account - db.deleteAccount(account) + if fork >= FkSpurious: + vmState.touchedAccounts.incl(vmState.blockHeader.coinbase) + # EIP158/161 state clearing + for account in vmState.touchedAccounts: + if db.accountExists(account) and db.isEmptyAccount(account): + debug "state clearing", account + db.deleteAccount(account) vmState.accountDb.updateOriginalRoot() result = gasUsed diff --git a/nimbus/vm/computation.nim b/nimbus/vm/computation.nim index eb2afa6b9..6e5c2e1a5 100644 --- a/nimbus/vm/computation.nim +++ b/nimbus/vm/computation.nim @@ -210,6 +210,7 @@ proc addChildComputation*(computation: BaseComputation, child: BaseComputation) computation.logEntries.add child.logEntries computation.gasMeter.refundGas(child.gasMeter.gasRefunded) computation.suicides.incl child.suicides + computation.touchedAccounts.incl child.touchedAccounts if not child.shouldBurnGas: computation.gasMeter.returnGas(child.gasMeter.gasRemaining) @@ -258,16 +259,6 @@ proc collectTouchedAccounts*(c: BaseComputation, output: var HashSet[EthAddress] let isIstanbul = c.getFork >= FkIstanbul let condition = c.isError or ancestorHadError - for beneficiary in c.touchedAccounts: - if condition: - # Special case to account for geth+parity bug - # https://github.com/ethereum/EIPs/issues/716 - if beneficiary.cmpThree: - output.incl beneficiary - continue - else: - output.incl beneficiary - if not c.msg.isCreate: if condition: # Special case to account for geth+parity bug diff --git a/nimbus/vm_state_transactions.nim b/nimbus/vm_state_transactions.nim index 2b76dd5e3..68cf0f695 100644 --- a/nimbus/vm_state_transactions.nim +++ b/nimbus/vm_state_transactions.nim @@ -79,6 +79,8 @@ proc execComputation*(computation: var BaseComputation) = if computation.getFork >= FkSpurious: computation.collectTouchedAccounts(computation.vmState.touchedAccounts) + if computation.isSuccess: + computation.vmState.touchedAccounts.incl computation.touchedAccounts computation.vmstate.status = computation.isSuccess if computation.isSuccess: