diff --git a/nimbus/p2p/executor.nim b/nimbus/p2p/executor.nim index d2bea1102..c38cee179 100644 --- a/nimbus/p2p/executor.nim +++ b/nimbus/p2p/executor.nim @@ -140,6 +140,17 @@ proc makeReceipt(vmState: BaseVMState, cumulativeGasUsed: GasInt, fork = FkFront result.logs = vmState.getAndClearLogEntries() result.bloom = logsBloom(result.logs).value.toByteArrayBE +proc prepareVMState(vmState: BaseVMState, header: BlockHeader) = + # TODO: move this proc to somewhere else if it already complete + + # blockNumber returned from VM should be current block number + # and not something else + vmState.blockHeader.blockNumber = header.blockNumber + + # time stamp? + # gas limit? + # etc? + proc processBlock*(chainDB: BaseChainDB, head, header: BlockHeader, body: BlockBody, vmState: BaseVMState): ValidationResult = let blockReward = 5.u256 * pow(10.u256, 18) # 5 ETH @@ -147,6 +158,8 @@ proc processBlock*(chainDB: BaseChainDB, head, header: BlockHeader, body: BlockB debug "Mismatched txRoot", blockNumber=header.blockNumber return ValidationResult.Error + prepareVMState(vmState, header) + var stateDb = vmState.accountDb if header.txRoot != BLANK_ROOT_HASH: if body.transactions.len == 0: diff --git a/nimbus/vm_state.nim b/nimbus/vm_state.nim index e8b6e235d..006f1d62a 100644 --- a/nimbus/vm_state.nim +++ b/nimbus/vm_state.nim @@ -51,7 +51,7 @@ method timestamp*(vmState: BaseVMState): EthTime {.base, gcsafe.} = method blockNumber*(vmState: BaseVMState): BlockNumber {.base, gcsafe.} = # it should return current block number # and not head.blockNumber - vmState.blockHeader.blockNumber + 1 + vmState.blockHeader.blockNumber method difficulty*(vmState: BaseVMState): UInt256 {.base, gcsafe.} = vmState.blockHeader.difficulty