Erc-20

展示使用者擁有的所有 NFT

  • July 14, 2021

我想知道像 OpenSea 這樣的市場如何在沒有合約地址的情況下自動知道使用者擁有的所有 NFT?

這個問題也可以簡化為查找使用者擁有的所有 erc20 代幣,這不是很模糊,因為任何人都可以隨時創建一個 erc20。

我找不到資源來搜尋Google試圖在他們的社區不和諧中提問,任何人都可以闡明,將不勝感激

為了獲取使用者的所有 NFT,您需要有一個索引數據庫來保存這些數據。這些市場執行著乙太坊全節點,然後它們索引transferERC1155 和 ERC721 合約的所有事件,並最終計算每個地址的餘額並將其保存到數據庫中,每個請求都可以快速訪問它。要索引的傳輸事件如下。

對於 ERC1155

TransferSingle(address,address,address,uint256,uint256)
TransferBatch(address,address,address,uint256[],uint256[])

對於 ERC721

Transfer(address,address,uint256)

這是一個相當繁瑣的過程,不幸的是,簡單的 web3.js 呼叫無法提供任何東西。這與數據在區塊鏈中的結構方式有關,它只包含交易而不是實際的索引使用者數據。

像這樣的系統可以繼續保持更新,因為即使人們一直在創建新的代幣合約,這些新合約也會發出轉賬事件,然後將用於更新余額。

如果您正在尋找一種通過簡單呼叫獲取使用者 NFT 餘額的簡單方法,您可以使用我建構的服務moralis.io。我們建構它是因為我遇到了與您完全相同的問題。它完全免費使用。

/nft/wallet/{WALLET_ADDRESS}- 獲取地址擁有的所有 NFT /nft/contract/{CONTRACT_ADDRESS}/token/{TOKEN_ID}/owner- 獲取特定 NFT 的所有所有者

或者你可以使用moralis sdk,你可以使用前端的javascript函式。

// get NFTs for current user on Mainnet
const userEthNFTs = await Moralis.Web3.getNFTs();

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