GraphQL: Move EVM-calling function makeCall to rpcMakeCall
`makeCall` used by GraphQL is another way to setup and call the EVM. Move it to `transaction/call_evm`. Signed-off-by: Jamie Lokier <jamie@shareable.org>
This commit is contained in:
parent
8bda81496a
commit
6dd14e4f4f
|
@ -746,20 +746,11 @@ proc toCallData(n: Node): (RpcCallData, bool) =
|
|||
(cd, gasLimit)
|
||||
|
||||
proc makeCall(ctx: GraphqlContextRef, callData: RpcCallData, header: BlockHeader, chainDB: BaseChainDB): RespResult =
|
||||
# TODO: handle revert
|
||||
var
|
||||
# we use current header stateRoot, unlike block validation
|
||||
# which use previous block stateRoot
|
||||
vmState = newBaseVMState(header.stateRoot, header, chainDB)
|
||||
fork = toFork(chainDB.config, header.blockNumber)
|
||||
comp = rpcSetupComputation(vmState, callData, fork)
|
||||
|
||||
let gas = comp.gasMeter.gasRemaining
|
||||
comp.execComputation()
|
||||
let (outputHex, gasUsed, isError) = rpcMakeCall(callData, header, chainDB)
|
||||
var map = respMap(ctx.ids[ethCallResult])
|
||||
map["data"] = resp("0x" & comp.output.toHex)
|
||||
map["gasUsed"] = longNode(gas - comp.gasMeter.gasRemaining).get()
|
||||
map["status"] = longNode(if comp.isError: 0 else: 1).get()
|
||||
map["data"] = resp("0x" & outputHex)
|
||||
map["gasUsed"] = longNode(gasUsed).get()
|
||||
map["status"] = longNode(if isError: 0 else: 1).get()
|
||||
ok(map)
|
||||
|
||||
proc blockCall(ud: RootRef, params: Args, parent: Node): RespResult {.apiPragma.} =
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
# at your option. This file may not be copied, modified, or distributed except according to those terms.
|
||||
|
||||
import
|
||||
eth/common/eth_types, stint, options,
|
||||
eth/common/eth_types, stint, options, stew/byteutils,
|
||||
".."/[vm_types, vm_types2, vm_state, vm_computation],
|
||||
".."/[db/db_chain, config, vm_state_transactions, rpc/hexstrings],
|
||||
".."/[db/accounts_cache, p2p/executor], eth/trie/db
|
||||
|
@ -55,6 +55,19 @@ proc rpcDoCall*(call: RpcCallData, header: BlockHeader, chain: BaseChainDB): Hex
|
|||
comp.execComputation()
|
||||
result = hexDataStr(comp.output)
|
||||
|
||||
proc rpcMakeCall*(call: RpcCallData, header: BlockHeader, chain: BaseChainDB): (string, GasInt, bool) =
|
||||
# TODO: handle revert
|
||||
var
|
||||
# we use current header stateRoot, unlike block validation
|
||||
# which use previous block stateRoot
|
||||
vmState = newBaseVMState(header.stateRoot, header, chain)
|
||||
fork = toFork(chain.config, header.blockNumber)
|
||||
comp = rpcSetupComputation(vmState, call, fork)
|
||||
|
||||
let gas = comp.gasMeter.gasRemaining
|
||||
comp.execComputation()
|
||||
return (comp.output.toHex, gas - comp.gasMeter.gasRemaining, comp.isError)
|
||||
|
||||
proc rpcEstimateGas*(call: RpcCallData, header: BlockHeader, chain: BaseChainDB, haveGasLimit: bool): GasInt =
|
||||
# TODO: handle revert and error
|
||||
var
|
||||
|
|
Loading…
Reference in New Issue