【问题标题】:Web3js method.call() is returning several blocks laterWeb3js method.call() 稍后返回几个块
【发布时间】:2021-12-28 22:37:55
【问题描述】:

我正在尝试获取智能合约变量的更新值。我这样做的方式是有一个 while 循环不断检查这个变量的值。

while(true) {
   const value = await contract.readVariable().call();
}

这工作得很好,但直到下一个开采的区块,我才得到结果,这大约需要 15 秒。我想知道如何在不等待下一个块的情况下第二次更新结果。这是我测试的确切结果。

我检测到12/28/2021, 3:02:42 block number 13895772 处的值已更改,但新值是在块13895771 at 08:02:26 PM +UTC 中挖掘的。如您所见,从我拿到它到实际开采它之间有 16 秒的延迟。

【问题讨论】:

  • 16s 似乎是从挖矿到确认并通过网络共享它的正常时间,但我对 web3 的参与并不多
  • @PLASMAchicken 如果一个区块被挖出,这算不算在网络上共享?
  • 矿工获取(一些)未决交易,验证它们,将它们放在一个块中,在块上运行算法,如果结果是好的,它是“挖掘的”,然后他们发送它到其他节点/矿工进行验证,然后正式完成
  • @PLASMAchicken 这是否意味着我获得更新值所需的时间是预期的,我看到的是一个完整的块稍后我得到更新的值。

标签: blockchain ethereum web3 web3js


【解决方案1】:

如果一个区块被挖出,这算不算在网络上共享?

Please read and understand how Ethereum state update works and then about state propagation in Ethereun works.

当您的更改值包含在以太坊区块链中时,无法保证任何时间范围。

【讨论】:

  • 有没有办法捕获该值,即使它没有在整个网络中传播,即使这意味着它可以在以后回滚?
  • 目前还没有办法实时模拟交易。 Ganache 可以一次性完成,但这意味着你需要分叉整个区块链,并且模拟的延迟是几分钟。
猜你喜欢
  • 1970-01-01
  • 2019-03-22
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多