January呀 2023-07-13 18:43 采纳率: 0%
浏览 60
已结题

geth提交交易时报错“invalid opcode:revert ”是为什么?

提交claimReward(1)的交易未被矿工处理时,状态变量claimed=false应该不会改变,并且在提交交易后也用语句查询确认了变量并未改变,但是再次发送这笔交易时就会提示“invalid opcode:revert ”,我查询原因是require语句不满足,可是如果claimed仍为false的话,require语句就是满足的,不应该出现这种状况,所以为什么第二次交易会失败?

img

img

  • 写回答

3条回答 默认 最新

  • _啊彪 2023-07-14 09:49
    关注

    这个问题可能由于您交易的执行状态和智能合约中变量的更新顺序导致的。请注意,当您提交一个交易时,该交易的执行和状态变更可能需要等待矿工的确认和执行。

    在第一次提交claimReward(1)的交易时,您查询的状态变量claimed=false是符合预期的。但是,由于交易还未被矿工确认和执行,智能合约中的状态变量可能仍然保持未改变的状态。

    当您尝试再次发送相同的交易时,以确认交易是否成功,由于该交易已经被先前的交易提交过了,交易执行会失败,因为该事务尝试重复处理同一交易(state-changing transaction)。

    具体而言,“invalid opcode:revert” 错误通常与智能合约中的require语句有关。这意味着在合约的执行过程中,require语句的条件未被满足,导致交易失败。在这种情况下,错误信息表明require语句引发了异常,并使交易失败。

    建议您在发送交易之前,根据最新的交易状态等待足够的时间,以确保前一个交易已经被矿工确认并执行。您可以使用交易哈希值来查询交易的执行状态,并在状态变量确实被更新后再发送下一个交易。

    如果您仍然遇到问题,您可能需要更详细地审查智能合约代码,并检查require语句的条件是否正确和合适。此外,还可以检查合约中其他可能引发异常的代码部分,以了解可能导致交易失败的原因。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月19日
  • 赞助了问题酬金15元 7月13日
  • 创建了问题 7月13日

悬赏问题

  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥15 ChatGPT网络被篡改怎么办?
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。
  • ¥20 在easyX库下编写C语言扑克游戏跑的快,能实现简单的人机对战
  • ¥15 svpwm波形异常求解答
  • ¥15 STM32——硬件IIC从机通信代码实现
  • ¥15 微生物组数据分析--微生物代谢物