mirror of
https://github.com/status-im/nimbus-eth1.git
synced 2025-02-04 08:16:19 +00:00
safer snapshot commit revert and dispose
This commit is contained in:
parent
e1c622f83f
commit
c722f34ef3
@ -103,9 +103,12 @@ proc revert*(snapshot: var ComputationSnapshot, burnsGas: bool = false) =
|
||||
snapshot.snapshot.revert()
|
||||
snapshot.computation.error = Error(info: getCurrentExceptionMsg(), burnsGas: burnsGas)
|
||||
|
||||
proc commit*(snapshot: var ComputationSnapshot) =
|
||||
proc commit*(snapshot: var ComputationSnapshot) {.inline.} =
|
||||
snapshot.snapshot.commit()
|
||||
|
||||
proc dispose*(snapshot: var ComputationSnapshot) {.inline.} =
|
||||
snapshot.snapshot.dispose()
|
||||
|
||||
proc applyMessageAux(computation: var BaseComputation, opCode: static[Op]) =
|
||||
if computation.msg.depth > STACK_DEPTH_LIMIT:
|
||||
raise newException(StackDepthError, "Stack depth limit reached")
|
||||
@ -171,6 +174,8 @@ proc applyMessageAux(computation: var BaseComputation, opCode: static[Op]) =
|
||||
|
||||
proc applyMessage(computation: var BaseComputation, opCode: static[Op]) =
|
||||
var snapshot = computation.snapshot()
|
||||
defer: snapshot.dispose()
|
||||
|
||||
try:
|
||||
computation.applyMessageAux(opCode)
|
||||
except VMError:
|
||||
@ -197,6 +202,7 @@ proc applyCreateMessage(fork: Fork, computation: var BaseComputation, opCode: st
|
||||
if contractCode.len == 0: return
|
||||
|
||||
var snapshot = computation.snapshot()
|
||||
defer: snapshot.dispose()
|
||||
|
||||
if fork >= FkSpurious and contractCode.len >= EIP170_CODE_SIZE_LIMIT:
|
||||
raise newException(OutOfGas, &"Contract code size exceeds EIP170 limit of {EIP170_CODE_SIZE_LIMIT}. Got code of size: {contractCode.len}")
|
||||
|
@ -144,7 +144,7 @@ proc snapshot*(vmState: BaseVMState): Snapshot =
|
||||
result.vmState = vmState
|
||||
|
||||
proc revert*(s: var Snapshot) =
|
||||
s.transaction.dispose()
|
||||
s.transaction.rollback()
|
||||
s.vmState.accountDb.rootHash = s.intermediateRoot
|
||||
s.vmState.blockHeader.stateRoot = s.intermediateRoot
|
||||
|
||||
@ -152,6 +152,9 @@ proc commit*(s: var Snapshot) =
|
||||
s.transaction.commit()
|
||||
s.vmState.accountDb.rootHash = s.vmState.blockHeader.stateRoot
|
||||
|
||||
proc dispose*(s: var Snapshot) {.inline.} =
|
||||
s.transaction.dispose()
|
||||
|
||||
proc getTracingResult*(vmState: BaseVMState): JsonNode =
|
||||
assert(vmState.tracingEnabled)
|
||||
vmState.tracer.trace
|
||||
|
@ -42,6 +42,7 @@ proc setupComputation*(vmState: BaseVMState, transaction: Transaction, sender: E
|
||||
|
||||
proc execComputation*(computation: var BaseComputation): bool =
|
||||
var snapshot = computation.snapshot()
|
||||
defer: snapshot.dispose()
|
||||
|
||||
try:
|
||||
computation.executeOpcodes()
|
||||
|
Loading…
x
Reference in New Issue
Block a user