move create contract incNonce to 'applyMessage'
This commit is contained in:
parent
ec8abf40e4
commit
ea4f851f80
|
@ -34,7 +34,6 @@ proc processTransaction*(tx: Transaction, sender: EthAddress, vmState: BaseVMSta
|
||||||
break
|
break
|
||||||
|
|
||||||
vmState.mutateStateDB:
|
vmState.mutateStateDB:
|
||||||
db.incNonce(sender)
|
|
||||||
db.subBalance(sender, upfrontGasCost)
|
db.subBalance(sender, upfrontGasCost)
|
||||||
|
|
||||||
execComputation(c)
|
execComputation(c)
|
||||||
|
|
|
@ -243,6 +243,10 @@ proc postExecuteVM(c: Computation, opCode: static[Op]) {.gcsafe.} =
|
||||||
proc executeOpcodes*(c: Computation) {.gcsafe.}
|
proc executeOpcodes*(c: Computation) {.gcsafe.}
|
||||||
|
|
||||||
proc applyMessage*(c: Computation, opCode: static[Op]) =
|
proc applyMessage*(c: Computation, opCode: static[Op]) =
|
||||||
|
when opCode == Create:
|
||||||
|
c.vmState.mutateStateDB:
|
||||||
|
db.incNonce(c.msg.sender)
|
||||||
|
|
||||||
c.snapshot()
|
c.snapshot()
|
||||||
defer:
|
defer:
|
||||||
c.dispose()
|
c.dispose()
|
||||||
|
|
|
@ -588,24 +588,14 @@ proc setupCreate(c: Computation, memPos, len: int, value: Uint256, opCode: stati
|
||||||
# Consume gas here that will be passed to child
|
# Consume gas here that will be passed to child
|
||||||
c.gasMeter.consumeGas(createMsgGas, reason="CREATE")
|
c.gasMeter.consumeGas(createMsgGas, reason="CREATE")
|
||||||
|
|
||||||
# Generate new address and check for collisions
|
|
||||||
var
|
|
||||||
contractAddress: EthAddress
|
|
||||||
isCollision: bool
|
|
||||||
|
|
||||||
when opCode == Create:
|
when opCode == Create:
|
||||||
const callKind = evmcCreate
|
const callKind = evmcCreate
|
||||||
c.vmState.mutateStateDB:
|
let creationNonce = c.vmState.readOnlyStateDb().getNonce(c.msg.contractAddress)
|
||||||
let creationNonce = db.getNonce(c.msg.contractAddress)
|
let contractAddress = generateAddress(c.msg.contractAddress, creationNonce)
|
||||||
db.setNonce(c.msg.contractAddress, creationNonce + 1)
|
|
||||||
|
|
||||||
contractAddress = generateAddress(c.msg.contractAddress, creationNonce)
|
|
||||||
else:
|
else:
|
||||||
const callKind = evmcCreate2
|
const callKind = evmcCreate2
|
||||||
c.vmState.mutateStateDB:
|
|
||||||
db.incNonce(c.msg.contractAddress)
|
|
||||||
let salt = c.stack.popInt()
|
let salt = c.stack.popInt()
|
||||||
contractAddress = generateSafeAddress(c.msg.contractAddress, salt, callData)
|
let contractAddress = generateSafeAddress(c.msg.contractAddress, salt, callData)
|
||||||
|
|
||||||
let childMsg = Message(
|
let childMsg = Message(
|
||||||
kind: callKind,
|
kind: callKind,
|
||||||
|
|
|
@ -69,6 +69,8 @@ proc execComputation*(c: Computation) =
|
||||||
if c.msg.isCreate:
|
if c.msg.isCreate:
|
||||||
c.applyMessage(Create)
|
c.applyMessage(Create)
|
||||||
else:
|
else:
|
||||||
|
c.vmState.mutateStateDB:
|
||||||
|
db.incNonce(c.msg.sender)
|
||||||
c.applyMessage(Call)
|
c.applyMessage(Call)
|
||||||
|
|
||||||
if c.fork >= FkSpurious:
|
if c.fork >= FkSpurious:
|
||||||
|
|
Loading…
Reference in New Issue