有时,当我使用ganache特定的evm_increaseTime方法并进入下一个块时,下一个时间戳不是:
current timestamp + advanced time但相反:
current timestamp + advanced time + 1 second这第二个是从哪里来的?它是事务的核心计算时间吗?闰秒?
RPC日志:
eth_sendTransaction
Transaction: 0x9cc8e2006d13f3349594a284a8f9ec8489c8bff6d57022143bb4457b30ee50b1
Gas usage: 224072
Block Number: 226
Block Time: Fri Aug 09 2019 11:01:40 GMT+0200 (Central European Summer Time)
eth_getTransactionReceipt
evm_increaseTime
evm_mine
eth_getBlockByNumber
eth_getBlockByNumber
eth_getBlockByNumber
eth_call
eth_getBlockByNumber
eth_call
eth_getBlockByNumber
eth_sendTransaction
Transaction: 0x2126e0a1ac901864c7dacabb7a6228f6753e5ad3ceb65f1957ecaaa395bc8569
Gas usage: 72408
Block Number: 228
Block Time: Fri Aug 09 2019 11:02:46 GMT+0200 (Central European Summer Time)
eth_getTransactionReceipt
eth_getBlockByNumber
eth_call
eth_getBlockByNumber
eth_call您可以看到,第二个时间戳是"11:02:46“,而应该是"11:02:45",因为我在测试中执行的代码是:
web3.utils.advanceTimeAndBlock(new BigNumber(65));发布于 2019-08-11 12:09:58
我就此写了一整篇文章:编写精确的随时间变化的信托测试
博士
evm_mine参数,表示要向前或向后跳的秒数。有关更多细节,请阅读此按下。const advanceBlockAtTime = (time) => {
return new Promise((resolve, reject) => {
web3.currentProvider.send(
{
jsonrpc: "2.0",
method: "evm_mine",
params: [time],
id: new Date().getTime(),
},
(err, _) => {
if (err) {
return reject(err);
}
const newBlockHash = web3.eth.getBlock("latest").hash;
return resolve(newBlockHash);
},
);
});
};发布于 2019-08-09 09:58:33
这是因为evm_mine将任意次数增加到最新的块,并且无法修复它,因为在这里您可以阅读更多的ganache工作:https://github.com/trufflesuite/ganache-cli/issues/463。
更新:您无法修复任意次数,但每次运行evm_mine时都要保持一致性,在发送方法中添加params
https://ethereum.stackexchange.com/questions/73751
复制相似问题