【发布时间】:2021-12-08 14:26:10
【问题描述】:
我有一份使用 Chainlink 管理员进行维护的合同,但 checkUpKeep/performUpkeep 没有运行。我已经为维护提供了足够的资金,以确保它有很高的余额。合约中的代码之前已部署,但现在包含一个小改动(在 Chainlink 函数之外),并且之前的合约正在接受维护。我的 checkUpKeep 和 performUpKeep 代码如下:
function **checkUpkeep**(bytes calldata /* checkData */) external view override returns (bool upkeepNeeded, bytes memory /* performData */) {
if(lottery_state == LOTTERY_STATE.OPEN){
upkeepNeeded = (block.timestamp - lastTimeStamp) >= duration;
}
else{
upkeepNeeded = false;
}
}
function **performUpkeep**(bytes calldata /* performData */) external override {
require(msg.sender == 0x4Cb093f226983713164A62138C3F718A5b595F73);
lottery_state = LOTTERY_STATE.DRAWING;
Random(random).getRandomNumber();
}
正如我之前提到的,这段代码正在另一个正在接受维护的合同中使用,所以我很困惑为什么它在新合同中不起作用。
【问题讨论】:
-
工作合同是否也有此
require声明?这是在 Kovan 测试网上,对吧? -
是的,工作合同有同样的
require声明。它是 keeper 注册表的地址。是的,它在 Kovan 测试网上。 -
谢谢。您可以添加与此合同关联的已注册 upKeep 的链接吗?
-
不幸的是,我无法调试它,因为您的智能合约没有在 Etherscan 上验证。您已成功注册维护,已获得资金,可通过注册表合同进行验证。考虑仔细检查这些细微的变化,因为这个问题有解决方案。从这里提供的代码sn-p,我只能说
lottery state没有打开或者duration大于(block.timestamp - lastTimeStamp)
标签: chainlink