Mining
是否可以在本地節點上執行待處理事務以查看結果?
我正在尋找一種在本地節點上執行目前待處理事務的方法,以查看它們的結果並記錄事件,而無需真正探勘它。
這是某種預模擬,看看網路中的下一個區塊會發生什麼。
是否可以?如何做呢?
您可以通過 eth_call 完全模擬交易。
她是 eth_call 和應用事務的程式碼片段(來自go-ethereum):
eth_call(無法更改狀態)
// Setup the gas pool (also for unmetered requests) // and apply the message. gp := new(core.GasPool).AddGas(math.MaxUint64) res, gas, failed, err := core.ApplyMessage(evm, msg, gp) if err := vmError(); err != nil { return nil, 0, false, err } return res, gas, failed, err
申請交易(可以更新狀態)
_, gas, failed, err := ApplyMessage(vmenv, msg, gp) if err != nil { return nil, 0, err } // Update the state with pending changes var root []byte if config.IsByzantium(header.Number) { statedb.Finalise(true) } else { root = statedb.IntermediateRoot(config.IsEIP158(header.Number)).Bytes() }
使用時記得返回模擬結果
eth_call
。solidity 函式如下所示:
function simulation() pure public returns(bool result) { result = doSimulation(); }