write contract unification
This commit is contained in:
parent
0654a232a3
commit
823dd95a53
|
@ -42,7 +42,7 @@ proc processTransaction*(tx: Transaction, sender: EthAddress, vmState: BaseVMSta
|
|||
|
||||
if execComputation(computation):
|
||||
if tx.isContractCreation:
|
||||
contractOK = computation.writeContract()
|
||||
contractOK = computation.writeContract(fork)
|
||||
result = computation.refundGas(tx, sender)
|
||||
|
||||
if not contractOK and fork == FkHomestead:
|
||||
|
|
|
@ -69,6 +69,9 @@ proc outputHex*(c: BaseComputation): string =
|
|||
return "0x"
|
||||
c.rawOutput.bytesToHex
|
||||
|
||||
proc isSuicided*(c: var BaseComputation, address: EthAddress): bool =
|
||||
result = address in c.accountsToDelete
|
||||
|
||||
proc prepareChildMessage*(
|
||||
c: var BaseComputation,
|
||||
gas: GasInt,
|
||||
|
@ -159,7 +162,7 @@ proc applyMessage(computation: var BaseComputation, opCode: static[Op]): bool =
|
|||
|
||||
result = not computation.isError
|
||||
|
||||
proc writeContract(fork: Fork, computation: var BaseComputation, opCode: static[Op]): bool =
|
||||
proc writeContract*(computation: var BaseComputation, fork: Fork): bool =
|
||||
result = true
|
||||
|
||||
let contractCode = computation.output
|
||||
|
@ -230,7 +233,7 @@ proc applyChildComputation*(parentComp, childComp: var BaseComputation, opCode:
|
|||
|
||||
if applyMessage(childComp, opCode):
|
||||
if childComp.msg.isCreate:
|
||||
contractOK = fork.writeContract(childComp, opCode)
|
||||
contractOK = childComp.writeContract(fork)
|
||||
|
||||
if not contractOK and fork == FkHomestead:
|
||||
# consume all gas
|
||||
|
@ -247,9 +250,6 @@ proc registerAccountForDeletion*(c: var BaseComputation, beneficiary: EthAddress
|
|||
"registered for deletion multiple times")
|
||||
c.accountsToDelete[c.msg.storageAddress] = beneficiary
|
||||
|
||||
proc isSuicided*(c: var BaseComputation, address: EthAddress): bool =
|
||||
result = address in c.accountsToDelete
|
||||
|
||||
proc addLogEntry*(c: var BaseComputation, log: Log) {.inline.} =
|
||||
c.logEntries.add(log)
|
||||
|
||||
|
|
|
@ -99,22 +99,6 @@ proc refundGas*(computation: BaseComputation, tx: Transaction, sender: EthAddres
|
|||
|
||||
result = gasUsed - gasRefund
|
||||
|
||||
proc writeContract*(computation: var BaseComputation): bool =
|
||||
result = true
|
||||
let contractAddress = computation.msg.storageAddress
|
||||
if computation.isSuicided(contractAddress): return
|
||||
|
||||
let codeCost = computation.gasCosts[Create].m_handler(0, 0, computation.output.len)
|
||||
if computation.gasMeter.gasRemaining >= codeCost:
|
||||
computation.gasMeter.consumeGas(codeCost, reason = "Write contract code for CREATE")
|
||||
computation.vmState.mutateStateDB:
|
||||
db.setCode(contractAddress, computation.output.toRange)
|
||||
result = true
|
||||
else:
|
||||
computation.vmState.mutateStateDB:
|
||||
db.setCode(contractAddress, ByteRange())
|
||||
result = false
|
||||
|
||||
#[
|
||||
method executeTransaction(vmState: BaseVMState, transaction: Transaction): (BaseComputation, BlockHeader) {.base.}=
|
||||
# Execute the transaction in the vm
|
||||
|
|
Loading…
Reference in New Issue