【问题标题】:PeformUpkeep does not execute when checkUpkeep returns true using Chainlink automation当 checkUpkeep 使用 Chainlink 自动化返回 true 时,PeformUpkeep 不执行
【发布时间】:2022-11-12 12:27:43
【问题描述】:

我们正在使用自定义逻辑自动化。检查 checkUpkeep 时,布尔值返回 true(附图片),但我们的执行维护没有运行。它正在调用另一个函数来运行花费大约 50k 到 100k 的气体(手动运行时)我们缺少什么? (附注:当我们执行一个简单的切换函数调用 performUpkeep 时有效——但不是我们的函数)。我什至还使用基于时间的选项(调用特定函数来执行相同的逻辑)将 gas 增加到 2,500,000 进行测试。这是回购https://github.com/billyjitsu/expir3/tree/main/packages/backend/contracts

我们期待 checkUpkeep 返回 true 时执行维护

【问题讨论】:

  • 您的 github 链接已损坏,您可以编辑答案以发布您的智能合约吗?

标签: solidity chainlink chainlink-keepers


【解决方案1】:

为了解决“为什么Chainlink checkUpkeep不执行”这样的问题,我建议做以下事情来调试你的维护。

  1. 由于checkUpkeepperformUpkeep 均由Chainlink automation 触发,您需要先检查您的自动化订阅。在自动化应用程序中,仔细检查合约地址是否正确。
  2. 因为chainlink节点要改变区块链状态(在你的消费者合约中调用performUpkeep),它必须支付gas费用。请务必确保您的订阅中有 LINK 的最低余额。
  3. 测试checkUpkeep 是否按预期工作。如果您的智能合约满足自动化的预定义条件,checkUpkeep 应该返回 true。 Chainlink 自动化仅在 checkUpkeep 返回 true 时调用 performUpkeep,因此如果 checkUpkeep 无法返回 true,则维护不起作用。自己拨打checkUpkeep测试是否正常。如果你不能得到true 作为返回值,自动化也不能得到true
  4. 测试performUpkeep 是否按预期工作。 Chainlink 自动化的机制是在checkUpkeep 返回true 时调用performUpkeep,因此您必须确保performUpkeep 可以被自动化调用。尝试手动调用performUpkeep 以查看它是否正常工作。

    希望能帮助到你!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-12
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2013-11-17
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多