我不认为它用完了汽油,因为计算使用了所提供的天然气的70%。下一次尝试时,除了随机数生成器中不同的块哈希之外,没有任何参数改变。我没发现密码有什么问题。我在Remix里重新运行了十几次,效果很好。
我能看到的唯一原因是,如果状态“滞后”,在事务中没有考虑到4个块之前发生的状态转换(这是通过函数中的检查所必需的)。但如果矿商“人为地”失败,因为他们没有跟踪国家,这一定意味着,大多数矿工同意,否则,该区块将被拒绝。除非大多数矿工腐败,否则这种情况不应发生。
所以我不知道为什么失败了。有谁知道它为什么失败了吗?这里可能不是请求事务调试的地方,但建议在这里这样做:调试失败的事务。
发布于 2021-10-21 04:54:06
它失败的原因有两个。首先,正如Ismael所指出的,这是一个气体输出误差。气体被错误地估计,是因为这个函数有两个不同的气体成本,取决于产生的随机数,一个比另一个更昂贵。估计的气体成本是使用估计时读取的区块哈希,触发了更便宜的功能类型。但是,在实际执行过程中的块链,触发了更昂贵的类型.如果将负燃气费用的退款计入交易结束时(来源),仍然会有足够的天然气,因此在执行过程中,天然气成本超过了供应的天然气。
举例说明了不同的天然气成本,这交易失败了。它被给予88k气体,它的价格为81k气体。这事务处理表明,对于函数中比较昂贵(81k)类型的计算,gas估计值为98k。而且,价格较低的71k气体,而且有88k的气体估计值可以看到这里。
非常感谢伊斯梅尔为我指明了正确的方向。这其实是很复杂的失败原因。
https://ethereum.stackexchange.com/questions/111849
复制相似问题