首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用chai/hardhat用safeTransferFrom测试onlyAllowedOperator

用chai/hardhat用safeTransferFrom测试onlyAllowedOperator
EN

Ethereum用户
提问于 2023-01-26 22:50:56
回答 1查看 80关注 0票数 0

我正在用safeTransferFromonlyAllowedOperator一起为NFT编写测试,测试在onlyAllowedOperator和不带D2时都失败了。以下是功能:

代码语言:javascript
复制
    function safeTransferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
        safeTransferFrom(from, to, tokenId);
    }

下面是一个测试:

代码语言:javascript
复制
  describe("ERC721: safeTransferFrom()", function () {

    it("safeTransferFrom(): Safe Transfer From owner to newOwner (address)", async function () {
      const { nft, owner, operator, newOwner, newOperator, minter } = await loadFixture(deployNFTFixture);

      await nft.mintTo(owner.address); // 1
      
      expect(await nft.balanceOf(owner.address)).to.equal(1);
      expect(await nft.balanceOf(newOwner.address)).to.equal(0);

      await nft.functions["safeTransferFrom(address,address,uint256)"](owner.address, newOwner.address, 1);

      expect(await nft.balanceOf(owner.address)).to.equal(0);
      expect(await nft.balanceOf(newOwner.address)).to.equal(1);

    });
  });

当我运行测试时,我会收到以下消息:

代码语言:javascript
复制
ERC721: safeTransferFrom()
         safeTransferFrom(): Safe Transfer From owner to newOwner (address) fails:
     Error: Transaction reverted and Hardhat couldn't infer the reason.
    at NFT.safeTransferFrom (contracts/NFT.sol:315)
    ...
    at NFT.safeTransferFrom (contracts/NFT.sol:315)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at runNextTicks (node:internal/process/task_queues:65:3)
    at listOnTimeout (node:internal/timers:526:9)
    at processTimers (node:internal/timers:500:7)
    at async HardhatNode._mineBlockWithPendingTxs (node_modules/hardhat/src/internal/hardhat-network/provider/node.ts:1815:23)
    at async HardhatNode.mineBlock (node_modules/hardhat/src/internal/hardhat-network/provider/node.ts:504:16)
    at async EthModule._sendTransactionAndReturnHash (node_modules/hardhat/src/internal/hardhat-network/provider/modules/eth.ts:1522:18)

我不知道为什么这些代币不被转移。

EN

回答 1

Ethereum用户

回答已采纳

发布于 2023-01-27 14:53:40

我认为您必须将此写入您的实体文件(添加super.):

代码语言:javascript
复制
    function safeTransferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
        super.safeTransferFrom(from, to, tokenId);
    }

否则,函数看起来就像在一次又一次地调用自己。

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

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

复制
相关文章

相似问题

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