Erc-721
ERC721 - 獲取所有代幣所有者的列表(所有地址)
我有一個包含多個 NFT 代幣的符合ERC721的合約。
我正在尋找一種隨機選擇一個令牌所有者的方法。有沒有辦法從 ERC721 獲取目前列表或所有令牌所有者,還是我需要自己創建映射?
如果自己創建映射,我想我需要將鑄幣者地址添加到所有所有者的映射中,然後每當轉移令牌時,我都需要更新新的所有者地址。如何覆蓋所有傳輸函式?
您可以嘗試使用函式獲取所有發出的
Transfer
事件。getPastEvents
基於 ERC721 介面Transfer
事件在所有權更改時發出。/// @dev This emits when ownership of any NFT changes by any mechanism. /// This event emits when NFTs are created (`from` == 0) and destroyed /// (`to` == 0). Exception: during contract creation, any number of NFTs /// may be created and assigned without emitting Transfer. At the time of /// any transfer, the approved address for that NFT (if any) is reset to none. event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
該
ERC721Enumerable
擴展的設計使這種使用非常簡單。如果您的令牌 ID 是連續的,則另一種選擇是可能的,只需在正確範圍內隨機選擇一個數字並查找該所有者。
如果您不使用
ERC721Enumerable
並且沒有可預測的令牌 ID 模式,那麼選擇隨機令牌的唯一方法是使用Transfer
事件生成(鏈外)所有令牌的列表並從中選擇。Su Squares 更新腳本僅包含這樣一個範常式式碼。它已獲得許可,可與 Ethers.js 一起使用並已記錄在案。您可以使用它來生成所有鑄造代幣的列表,並隨心所欲地使用它們,包括查找所有者、元數據和您想要分析的任何其他內容。