为什么以及何时调用 setApprovalForAll?

问题描述 投票:0回答:3

我很难理解为什么以及何时在 NFT 生成合约上调用 SetApprovalForAll。

酷猫为例。为了方便起见,下面有相关交易的屏幕截图。

我注意到,对于此合同和其他合同,反复调用“Set Approval For All”。根据我自己对允许铸造的合约的有限经验,通过

_safeMint
,我也在日志中看到了 SetApprovalForAll 交易。它没有在我的代码中直接调用。

为什么这么称呼?钱包是否将其作为铸造过程的一部分?

ethereum solidity nft openzeppelin erc721
3个回答
9
投票

当您在市场上出售 NFT 时,您需要授权该市场将已售物品从您的地址转移到买家的地址。

这就是 SetApprovalForAll 的用途:因为您信任市场,所以您“批准”它出售您的 NFT(不是您所有的 NFT,而是您在本合同中拥有的 NFT)。

市场就是此 API 中所谓的“运营商”。


0
投票

这是openzeppelin ERC721.sol

setApprovalForAll
调用此函数:

// Approve `operator` to operate on all of `owner` tokens
function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

_operatorApprovals
是一个映射:

// owner address allows operator address
mapping(address => mapping(address => bool)) private _operatorApprovals;

运营商是受信任且可以得到第三方认可的第三方 所有者有权访问他们拥有的所有 NFT。如果业主给 获得运营商的许可,该运营商可以撤回任何 来自该所有者地址的 NFT,他们可以将其转移到 他们自己或他人。


0
投票

我 setApprovalForAll 是一个诈骗 dapp 网站。怎么取消

© www.soinside.com 2019 - 2024. All rights reserved.