首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能启动包含引用另一个合同函数的函数

不能启动包含引用另一个合同函数的函数
EN

Ethereum用户
提问于 2022-01-26 08:20:30
回答 1查看 111关注 0票数 0

我正在尝试测试函数( test ),它包含对另一个契约函数(transferFrom)的引用。但当我测试的时候我犯了个错误。但是MyToken已经部署到了硬件网络,并且有地址。

这是一份合同

代码语言:javascript
复制
import "./MyToken.sol";

contract Staking {
    MyToken public myToken;

    function stake(uint256 _value) public {
        myToken.transferFrom(msg.sender, address(this), _value);
    }
}

这是一个测试

代码语言:javascript
复制
import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
import { expect } from "chai";
import { assert } from "console";
import { ethers } from "hardhat";
import { MyToken, MyToken__factory, Staking, Staking__factory } from "../typechain";
// import { MyToken, MyToken__factory } from "../typechain";

describe("MyToken", function () {
  let staking: Staking;
  let myToken: MyToken;
  let bob: SignerWithAddress,
    alice: SignerWithAddress;

  before(async () => {
    [bob, alice] = await ethers.getSigners();
  })

  beforeEach(async () => {
    const MyToken = await ethers.getContractFactory("MyToken") as MyToken__factory;
    myToken = await MyToken.deploy() as MyToken;
    await myToken.deployed();

    const Staking = await ethers.getContractFactory("Staking") as Staking__factory;
    staking = await Staking.deploy() as Staking;
    await staking.deployed();
  })

  **it("staking", async function () {
    const value = 100;
      await staking.stake(value);
  })**
EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-01-26 10:54:23

如果您的Staking只看上去像您在问题中共享的那样,那么您就没有设置myToken的地址。您需要在构造函数或定义中显式设置地址。

例如:

代码语言:javascript
复制
import "./MyToken.sol";

contract Staking {
    MyToken public myToken;

    constructor(address token) {
      myToken = token;
    }

    function stake(uint256 _value) public {
        myToken.transferFrom(msg.sender, address(this), _value);
    }
}

在测试中,您需要将myToken的地址传递给Staking.deploy函数:

代码语言:javascript
复制
staking = await Staking.deploy(myToken.address) as Staking;

调试的一种方法是检查您的测试是否正确初始化了myToken

代码语言:javascript
复制
expect(await staking.myToken()).to.be.eq(myToken.address)
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/119959

复制
相关文章

相似问题

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