首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解ganache时间戳

理解ganache时间戳
EN

Ethereum用户
提问于 2019-08-08 23:52:10
回答 2查看 1.9K关注 0票数 2

有时,当我使用ganache特定的evm_increaseTime方法并进入下一个块时,下一个时间戳不是:

代码语言:javascript
复制
current timestamp + advanced time

但相反:

代码语言:javascript
复制
current timestamp + advanced time + 1 second

这第二个是从哪里来的?它是事务的核心计算时间吗?闰秒?

RPC日志:

代码语言:javascript
复制
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",因为我在测试中执行的代码是:

代码语言:javascript
复制
web3.utils.advanceTimeAndBlock(new BigNumber(65));
EN

回答 2

Ethereum用户

回答已采纳

发布于 2019-08-11 12:09:58

我就此写了一整篇文章:编写精确的随时间变化的信托测试

TL;

博士

  1. 1秒来自运行时成本,即javascript承诺解决问题所需的时间。
  2. 为了提高准确性,您必须使用evm_mine参数,表示要向前或向后跳的秒数。有关更多细节,请阅读此按下
代码语言:javascript
复制
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);
      },
    );
  });
};
票数 8
EN

Ethereum用户

发布于 2019-08-09 09:58:33

这是因为evm_mine将任意次数增加到最新的块,并且无法修复它,因为在这里您可以阅读更多的ganache工作:https://github.com/trufflesuite/ganache-cli/issues/463

更新:您无法修复任意次数,但每次运行evm_mine时都要保持一致性,在发送方法中添加params

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/73751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档