我很难理解为什么以及何时在 NFT 生成合约上调用 SetApprovalForAll。
以酷猫为例。为了方便起见,下面有相关交易的屏幕截图。
我注意到,对于此合同和其他合同,反复调用“Set Approval For All”。根据我自己对允许铸造的合约的有限经验,通过
_safeMint
,我也在日志中看到了 SetApprovalForAll 交易。它没有在我的代码中直接调用。
为什么这么称呼?钱包是否将其作为铸造过程的一部分?
当您在市场上出售 NFT 时,您需要授权该市场将已售物品从您的地址转移到买家的地址。
这就是 SetApprovalForAll 的用途:因为您信任市场,所以您“批准”它出售您的 NFT(不是您所有的 NFT,而是您在本合同中拥有的 NFT)。
市场就是此 API 中所谓的“运营商”。
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,他们可以将其转移到 他们自己或他人。
我 setApprovalForAll 是一个诈骗 dapp 网站。怎么取消