我问这个问题是关于上面提到的ERC721规范/代码中的传输事件。
/ @dev --当任何NFT的所有权被任何机制改变时,这个值就会发出。/此事件在创建NFT (
from== 0)和销毁/ (to== 0)时发出。例外情况:在合同创建期间,可以创建和分配任何数量的NFT/,而不需要发送传输。在/任何传输时,该NFT的批准地址(如果有的话)将重置为none。事件传输(地址索引_from、地址索引_to、uint256索引_tokenId);
因为这件事,我挠头好几天了。这怎麽可能?从技术上讲,我想不出任何解决方案来创建"n“令牌并将其分配给钱包地址,而无需在mint函数中的for循环中映射令牌in。为了实现这一点,应该绕过官方实现中的枚举函数。但是,这些代币在合同中是如何存在的呢?有关于这方面的实例实现吗?我到处找,但什么也找不到。能够在创建合同时创建"n“个NFT(不发出事件)对我有很大好处;我正在做一些实验,所以现在我忽略了这些事件。
谢谢!
发布于 2021-01-27 16:44:37
嗯,没有任何“官方”的执行。只有参考实现,只要遵循ERC-721标准,就可以以任何方式实现它。
此外,ERC-721标准能否强制传输事件的发出也是值得怀疑的。从技术上讲,它不能强制执行--无法确定合同X是否总是发出事件,以及它是否应该被认为是ERC-721。因此,“是合同X和ERC-721合同”的意义相当模糊。
如果您查看mint功能在https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol#L333上的一个引用实现,您可以看到它发出传输事件。因此,您可以做的就是简单地复制该代码并将其添加到没有Transfer事件的契约构造函数中,使用您想要的任何参数(即使使用循环(如果您愿意)。
或者,更好的是,对于您的测试,您可能并不关心您的合同是否真的与ERC-721兼容,所以您可以只包含测试所需的功能,而不需要其他功能。
https://ethereum.stackexchange.com/questions/92809
复制相似问题