首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试合同接收ERC721令牌的能力?

如何测试合同接收ERC721令牌的能力?
EN

Stack Overflow用户
提问于 2021-07-07 16:21:23
回答 2查看 1.2K关注 0票数 0

我在试验我的合同。我启用了合同来接收ERC721令牌:

代码语言:javascript
复制
function onERC721Received(address, address _from, uint256 _tokenId, bytes calldata) external override returns(bytes4) {
    nftContract = ERC721(msg.sender);
    tokenId = _tokenId;
    tokenAdded = true;

    return 0x150b7a02;
}

是否有一种方法可以模拟使用Mocha和Chai发送到此合同的令牌?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-07 19:04:23

在EVM之外(例如,在JS测试中),无法检查事务的返回值。只有它的状态(成功/恢复),发出事件(在您的例子中为非)和很少其他元数据。还可以检查调用的返回值,如assert.equal语句中的那样。

代码语言:javascript
复制
contract('MyContract', () => {
    it('receives a token', async () => {
        const tx = await myContract.onERC721Received(
            '0x123',      // address
            '0x456',      // address _from
            1,            // uint256 _tokenId
            [0x01, 0x02]  // bytes calldata
        );

        assert.equal(tx.receipt.status, true); // tx succeeded

        assert.equal(await contract.nftContract, '0x123');
        assert.equal((await contract.tokenId).toNumber(), 1);
        assert.equal(await contract.tokenAdded, true);
    });
});

医生:

  • 松露contract代替Mocha describe - 文档
  • 接收状态- Truffle 文档,Web3 文档 (到信托文档中的Web3的链接已经过时)
  • 不需要在信托中使用.send().call(),因为它选择tx或自动从合同ABI - 文档调用。
票数 3
EN

Stack Overflow用户

发布于 2022-01-19 17:52:59

在我的测试中,我也使用一个ERC721模拟合同来测试这一点。因此,我部署这两个契约并为它们创建新实例,然后从ERC721调用mint函数到测试地址下的契约。然后用以下方法检查ERC721的余额:

代码语言:javascript
复制
ERC721.balanceOf(underTest.address, 1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68289692

复制
相关文章

相似问题

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