我在Hardhat控制台中创建了一个合约实例,如下所示:
const contract_fac = await ethers.getContractFactory("ContractName");
const contract = await contract_fac.attach("CONTRACTADDR...");
除了safeTransferFrom
之外,合约对象具有所有public/external函数。为什么?
当我使用contract.safeTransferFrom(…)
调用它时,它会抛出JavaScript错误“safeTransferFrom不是一个函数”。这是一个bug还是我没有理解其中的一些东西?safeTransferFrom
函数在ABI中列出。
我使用未更改的OpenZeppelin(v. 4.2)721令牌模板、Ethers.js(v. 5.4.1)和hardhat(v. 2.4.1)。
更新: 问题已解决。safeTransferFrom是一个重载函数。在ethers中,调用重载的合约函数的语法与非重载函数的语法不同。 Ethers.js文档
错误:
contract.safeTransferFrom(addr1, addr2, 1);
正确:
contract["safeTransferFrom(address,address,uint256)"](addr1, addr2, 1);
safeTransferFrom
时抛出错误的JS代码片段吗? - Petr Hejda