安全帽测试:<functionName> 不是函数

sto*_* TV 3 blockchain solidity hardhat

我正在使用 BSC 分叉在安全帽网络上测试我的合约。

我正在部署具有铸币功能的代币合约:

// @dev Creates `_amount` token to `_to`. Must only be called by the owner (MasterChef).
function mint(address _to, uint256 _amount) public onlyOwner {
    _mint(_to, _amount);
    _moveDelegates(address(0), _delegates[_to], _amount);
}
Run Code Online (Sandbox Code Playgroud)

然后我将其部署到测试中> npx hardhat test,它将运行此代码的测试:

...
it("Should deploy", async () => {
        token = await Token.deploy();
        await token.deployed();
        console.debug(`\t\t\tToken Contract Address: ${cyan}`, token.address);
        const supply = await token.totalSupply()
        console.debug(`\t\t\tToken totalSupply: ${yellow}`, supply);
        await token.mint(owner.address, web3.utils.toWei("1000", 'ether'))
        console.debug(`\t\t\tToken owner balance: ${cyan}`, token.balanceOf(owner.address));
 });
 ...
Run Code Online (Sandbox Code Playgroud)

测试正确打印前 2 个控制台调试:

 Token Contract Address: 0x5FbDB2315678afecb367f032d93F642f64180aa3
 Token totalSupply: 0
Run Code Online (Sandbox Code Playgroud)

token.totalSupply()有效,因此令牌已正确部署,但是当它必须调用它时token.mint()会出现以下错误:

 TypeError: token.mint is not a function
  at Context.<anonymous> (test/general.js:102:21)
  at runMicrotasks (<anonymous>)
  at processTicksAndRejections (internal/process/task_queues.js:95:5)
Run Code Online (Sandbox Code Playgroud)

我尝试清理所有正在运行的工件> npx hardhat clean并删除所有缓存,但仍然有错误

小智 18

如果您声明了两个 mint 函数,那么您必须显式使用完全限定签名。例子:

token["mint(address,uint256)"](owner.address, web3.utils.toWei("1000", 'ether'))
Run Code Online (Sandbox Code Playgroud)

我在这里找到了解决方案 https://github.com/ethers-io/ethers.js/issues/407