好奇钱包(例如元掩码/其他)究竟是如何知道可能在其所有权下的任何 ERC1155 代币的?
例如,我可能有一个 ERC1155 合同,它发出 100000 个不同类型的令牌(每个都有不同的 tokenId)
ERC1155 接口确实有一个balanceOf(account, id)
功能,但这当然需要钱包预先了解各种 tokenId 才能使用它。
钱包可以监听钱包地址的所有 TransferSingle 事件并从中获取代币余额,但这肯定也是有问题的,因为代币可能已经转移到其他钱包。
可以在合约中维护一个映射,该映射维护一个地址持有的 tokenIds,例如
mapping(address => uint256[] ) tokenIdsInWallet
虽然这可以工作,但它不是标准的接口功能,所以钱包不会知道它