首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeError:无法读取未定义的属性(checkUpkeep、链接保持器)

TypeError:无法读取未定义的属性(checkUpkeep、链接保持器)
EN

Stack Overflow用户
提问于 2022-07-30 11:15:46
回答 2查看 131关注 0票数 1

我在用安全帽测试我的智能合同时遇到了这个错误

TypeError:无法读取未定义的属性(读取“checkUpkeep”)

测试代码

代码语言:javascript
运行
复制
 describe("checkUpkeep", () => {
              it("returns false if people haven't sent any eth", async () => {
                  await network.provider.send("evm_increaseTime", [interval.toNumber() + 1])
                  await network.provider.send("evm_mine", [])
                  const { upkeepNeeded } = await raffle.callstatic.checkUpkeep("0x")
                  assert(!upkeepNeeded)
              })
          })

smart合同的相关代码

代码语言:javascript
运行
复制
function checkUpkeep(
        bytes memory /* checkData*/
    )
        public
        view
        override
        returns (
            bool upkeepNeeded,
            bytes memory /* performData */
        )
    {
        bool isOpen = RaffleState.OPEN == s_raffleState;
        bool timePassed = (((block.timestamp) - s_lastTimeStamp) > i_interval);
        bool hasPlayers = s_players.length > 0;
        bool hasBalance = address(this).balance > 0;
        upkeepNeeded = (isOpen && timePassed && hasPlayers && hasBalance);
        return (upkeepNeeded, "0x0");
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-30 14:05:11

我知道为时已晚,但当您尝试调用checkUpkeep函数时,应该是"callStatic“而不是”回调“

票数 2
EN

Stack Overflow用户

发布于 2022-08-01 04:27:37

由于它的JS很难知道哪个函数调用正在尝试访问一个具有未定义值的变量。根据您提供的代码,对raffle的引用甚至可能是未定义的。

但我假设这段代码与这是什么相同。

在您的硬件配置或测试导入中可能缺少一个导入。再检查一遍。看起来,在运行测试时,您的执行上下文需要的东西不会被注入。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73175127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档