Erc-721

ERC721 - 獲取所有代幣所有者的列表(所有地址)

  • January 7, 2022

我有一個包含多個 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 一起使用並已記錄在案。您可以使用它來生成所有鑄造代幣的列表,並隨心所欲地使用它們,包括查找所有者、元數據和您想要分析的任何其他內容。

引用自:https://ethereum.stackexchange.com/questions/118219