ether.js 重载方法

用ether.js 调用 safeTransferFrom 方法时总是报 safeTransferFrom is not a function 错误


    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(
                    msg.sender,
                    from,
                    id,
                    ""
                ) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

 function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        transferFrom(from, to, id);

        require(
            to.code.length == 0 ||
                ERC721TokenReceiver(to).onERC721Received(
                    msg.sender,
                    from,
                    id,
                    data
                ) ==
                ERC721TokenReceiver.onERC721Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

在ERC721中 safeTransferFrom 是重载方法 单独根据方法名去找 就会找到两个 。
也就是contract.safeTransferFrom(…) 这种写法是有问题的。
错误写法

contract.safeTransferFrom(addr1, addr2, 1);

正确写法

contract["safeTransferFrom(address,address,uint256)"](addr1, addr2, 1);

参考https://stackoverflow.com/questions/68289806/no-safetransferfrom-function-in-ethers-js-contract-instance

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容