From 4cc318d9488ac813dcac349ba813be25edced5d2 Mon Sep 17 00:00:00 2001 From: andri lim Date: Wed, 27 Feb 2019 21:04:42 +0700 Subject: [PATCH] fix block 668910 problem --- nimbus/p2p/executor.nim | 1 - nimbus/vm/computation.nim | 3 ++- nimbus/vm_state.nim | 8 ++------ nimbus/vm_state_transactions.nim | 2 +- nimbus/vm_types.nim | 1 + 5 files changed, 6 insertions(+), 9 deletions(-) diff --git a/nimbus/p2p/executor.nim b/nimbus/p2p/executor.nim index 066f67302..163c061cd 100644 --- a/nimbus/p2p/executor.nim +++ b/nimbus/p2p/executor.nim @@ -21,7 +21,6 @@ proc contractCall*(tx: Transaction, vmState: BaseVMState, sender: EthAddress, fo return (tx.gasLimit - gasRemaining - gasRefund) else: if computation.tracingEnabled: computation.traceError() - vmState.clearLogs() return tx.gasLimit proc processTransaction*(tx: Transaction, sender: EthAddress, vmState: BaseVMState): GasInt = diff --git a/nimbus/vm/computation.nim b/nimbus/vm/computation.nim index e5c06ef31..d7969273f 100644 --- a/nimbus/vm/computation.nim +++ b/nimbus/vm/computation.nim @@ -276,6 +276,7 @@ proc addChildComputation(fork: Fork, computation: var BaseComputation, child: Ba computation.returnData = child.output for k, v in child.accountsToDelete: computation.accountsToDelete[k] = v + computation.logEntries.add child.logEntries computation.children.add(child) proc getFork*(computation: BaseComputation): Fork = @@ -302,7 +303,7 @@ proc isSuicided*(c: var BaseComputation, address: EthAddress): bool = result = address in c.accountsToDelete proc addLogEntry*(c: var BaseComputation, log: Log) {.inline.} = - c.vmState.addLogEntry(log) + c.logEntries.add(log) # many methods are basically TODO, but they still return valid values # in order to test some existing code diff --git a/nimbus/vm_state.nim b/nimbus/vm_state.nim index d90d416d5..d0b564de5 100644 --- a/nimbus/vm_state.nim +++ b/nimbus/vm_state.nim @@ -163,17 +163,13 @@ proc getTracingResult*(vmState: BaseVMState): JsonNode = assert(vmState.tracingEnabled) vmState.tracer.trace -proc addLogEntry*(vmState: BaseVMState, log: Log) = - vmState.logEntries.add(log) +proc addLogs*(vmState: BaseVMState, logs: seq[Log]) = + shallowCopy(vmState.logEntries, logs) proc getAndClearLogEntries*(vmState: BaseVMState): seq[Log] = shallowCopy(result, vmState.logEntries) vmState.logEntries = @[] -proc clearLogs*(vmState: BaseVMState) = - # call this when computation error - vmState.logEntries.setLen(0) - proc enableTracing*(vmState: BaseVMState) = vmState.tracingEnabled = true diff --git a/nimbus/vm_state_transactions.nim b/nimbus/vm_state_transactions.nim index 2f4c6ebce..e10fc220a 100644 --- a/nimbus/vm_state_transactions.nim +++ b/nimbus/vm_state_transactions.nim @@ -82,6 +82,7 @@ proc execComputation*(computation: var BaseComputation): bool = if result: snapshot.commit() + computation.vmState.addLogs(computation.logEntries) else: snapshot.revert() @@ -126,7 +127,6 @@ proc applyCreateTransaction*(tx: Transaction, vmState: BaseVMState, sender: EthA return (gasUsed + codeCost - gasRefund) else: if c.tracingEnabled: c.traceError() - vmState.clearLogs() return tx.gasLimit #[ diff --git a/nimbus/vm_types.nim b/nimbus/vm_types.nim index b29af1540..0f02ade05 100644 --- a/nimbus/vm_types.nim +++ b/nimbus/vm_types.nim @@ -64,6 +64,7 @@ type gasCosts*: GasCosts # TODO - will be hidden at a lower layer opCodeExec*: OpcodeExecutor forkOverride*: Option[Fork] + logEntries*: seq[Log] Error* = ref object info*: string