Mining

是否可以在本地節點上執行待處理事務以查看結果?

  • May 10, 2019

我正在尋找一種在本地節點上執行目前待處理事務的方法,以查看它們的結果並記錄事件,而無需真正探勘它。

這是某種預模擬,看看網路中的下一個區塊會發生什麼。

是否可以?如何做呢?

您可以通過 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();
}

引用自:https://ethereum.stackexchange.com/questions/69348