Testrpc

evm_increaseTime 不增加時間戳

  • September 30, 2017

我怎樣才能解決這個問題?

看:

$ truffle console
truffle(development)> web3.eth.getBlock("latest").timestamp
> 1506694386
truffle(development)> web3.currentProvider.send({jsonrpc: "2.0", method: "evm_increaseTime", params: [500000], id: 123})
{ id: 123, jsonrpc: '2.0', result: 500000 }
truffle(development)> web3.currentProvider.send({jsonrpc: "2.0", method: "evm_increaseTime", params: [500000], id: 123})
{ id: 123, jsonrpc: '2.0', result: 1000000 }

使用evm_increaseTime時,結果返回一個附加到 0 的值,而不是添加到塊時間上。

預期result值應該是 1506694386 + 500000,但它返回的是 0 + 500000。

你的環境

  • 使用版本:v4.1.3
  • 作業系統和版本:Mac OSX

編輯:關於強制挖礦的建議:

如果我在 perform 之前(甚至之後)探勘一個塊evm_increaseTime,它沒有任何區別:

$ truffle console
truffle(development)> web3.eth.getBlock("latest").timestamp
1506739091
truffle(development)> web3.currentProvider.send({jsonrpc: "2.0", method: "evm_mine", params: [], id: 0})
{ id: 0, jsonrpc: '2.0', result: [] }
truffle(development)> web3.eth.getBlock("latest").timestamp
1506739124
truffle(development)> web3.eth.getBlock("latest").timestamp
1506739124
truffle(development)> web3.currentProvider.send({jsonrpc: "2.0", method: "evm_increaseTime", params: [500000], id: 123})
{ id: 123, jsonrpc: '2.0', result: 500000 }
truffle(development)> web3.currentProvider.send({jsonrpc: "2.0", method: "evm_mine", params: [], id: 0})
{ id: 0, jsonrpc: '2.0', result: [] }
truffle(development)> web3.currentProvider.send({jsonrpc: "2.0", method: "evm_increaseTime", params: [500000], id: 123})
{ id: 123, jsonrpc: '2.0', result: 1000000 }

查看 testrpc 文件 https://github.com/ethereumjs/testrpc

evm_increaseTime :及時向前跳轉。採用一個參數,即增加的時間量(以秒為單位)。返回總時間調整,以秒為單位。

因此,您進行的第一次呼叫返回 500000 並且第二次呼叫返回總時間調整 500000 + 500000 = 1000000 是正常的。

為了使這些調整有效,您需要在執行 evm_increaseTime 後強制探勘一個塊:

web3.currentProvider.send({jsonrpc: "2.0", method: "evm_mine", params: [], id: 0})

之後,您可以使用以下命令檢查目前時間戳:

web3.eth.getBlock(web3.eth.blockNumber).timestamp

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