首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ERC721 _checkOnERC721Received是做什么的?

ERC721 _checkOnERC721Received是做什么的?
EN

Ethereum用户
提问于 2022-01-12 05:55:44
回答 1查看 1.5K关注 0票数 3
代码语言:javascript
复制
function _checkOnERC721Received(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
) private returns (bool) {
    if (to.isContract()) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver.onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert("ERC721: transfer to non ERC721Receiver implementer");
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    } else {
        return true;
    }
}
EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-01-12 06:14:44

If通常在令牌被传输后调用(在相同的tx中)。

如果令牌的接收方是契约,则检查契约是否实现了onERC721Received接口。

如果不是,它将恢复事务。

如果是,则接收方合同有一个onERC721Received方法。ERC721调用这个方法,现在执行到接收方合同中去做他想做的任何事情。例如-对接收到的令牌进行托管。或者更危险的是-重新进入统721控制系统.

在接收方令牌的onERC721Received完成后,将在ERC721合同中恢复执行。

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

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

复制
相关文章

相似问题

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