首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现onERC721Received函数

如何实现onERC721Received函数
EN

Stack Overflow用户
提问于 2022-03-28 11:16:28
回答 2查看 3K关注 0票数 4

我试图发送一个NFT到一个智能契约来托管,但是当我得到一个关于未使用的变量的错误时,很难实现重写函数onERC721Received --这就是我得到的错误吗?

代码语言:javascript
复制
Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.
--> contracts/NftEscrow.sol:11:79:
|
11 | function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes memory _data) public override returns(bytes4) {
| ^^^^^^^^^^^^^^^^^^

这是最明智的合同

代码语言:javascript
复制
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";

    
    contract nftescrow is IERC721Receiver {
        
        enum ProjectState {newEscrow, nftDeposited, cancelNFT, ethDeposited, canceledBeforeDelivery, deliveryInitiated, delivered}
        
        address payable public sellerAddress;
        address payable public buyerAddress;
        address public nftAddress;
        uint256 tokenID;
        bool buyerCancel = false;
        bool sellerCancel = false;
        ProjectState public projectState;
    
        constructor()
        {
            sellerAddress = payable(msg.sender);
            projectState = ProjectState.newEscrow;
        }
        
        function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) public override returns (bytes4) {
            return this.onERC721Received.selector;
        }
        
        function depositNFT(address _NFTAddress, uint256 _TokenID)
            public
            inProjectState(ProjectState.newEscrow)
            onlySeller
        {
            nftAddress = _NFTAddress;
            tokenID = _TokenID;
            ERC721(nftAddress).safeTransferFrom(msg.sender, address(this), tokenID);
            projectState = ProjectState.nftDeposited;
        }
    } 
    
    }

有人知道怎么解决这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2022-07-29 13:24:02

你可以让警告像这样消失:

代码语言:javascript
复制
    function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {
        return IERC721Receiver.onERC721Received.selector;
    }
票数 5
EN

Stack Overflow用户

发布于 2022-03-28 12:45:37

这只是一个警告--而不是错误--所以即使有警告,合同也会进行编译。

编译器告诉您您正在定义参数operatortokenIdfromdata,但您没有使用它们。但是,ERC721标准要求onERC721Received()函数接受所有这些参数,即使您可能不使用它们,因为函数选择器是从它们确定的。

所以你可以安全地忽略这个警告。

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

https://stackoverflow.com/questions/71646570

复制
相关文章

相似问题

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