ERC-721:如何获取所有代币 ID?
ERC-721: How to get all token ids?
我想遍历以太坊 ERC-721 合约的所有代币 ID。
有些合约有计数 ids (0, 1, 2, 3, ...) 这很容易,但有些有随机 ids,例如https://etherscan.io/token/0xf87e31492faf9a91b02ee0deaad50d51d56d5d4d#inventory
遗憾的是,etherscan 只显示最后使用的 10000 个令牌 ID,但我想遍历所有 79490 个。
有没有办法做到这一点?对我来说,一切都很好。使用一些 API.
设置我自己的以太坊节点
您可以遍历收集合约发出的所有 Transfer()
事件。
您正在寻找转账 from
地址 0x0
(铸造的代币)。并从列表中排除转账 to
地址 0x0
(销毁的代币)。
实现此目的的方法之一是使用 Web3 合约 getPastEvents()
函数 (docs)。
const myContract = new web3.eth.Contract(abiJson, contractAddress);
myContract.getPastEvents('Transfer', {
filter: {
_from: '0x0000000000000000000000000000000000000000'
},
fromBlock: 0
}).then((events) => {
for (let event of events) {
console.log(event.returnValues._tokenId);
}
});
没有简单的方法可以以与合约无关的方式使用以太坊节点来完成它...ERC-712 没有指定任何允许查询所有代币 ID 的接口方法,所以除非你的合约是查看使用顺序令牌 ID,无法从简单的节点查询中猜测所有令牌 ID。
除非您想遍历合约的整个交易历史以获取每个铸造的 NFT 的 ID(为此您需要一个存档节点,因为完整节点不会有完整的交易历史)您应该使用索引所有 NFT activity.
的服务中的 API
您可以使用来自 CovalentHQ 的 API:
https://www.covalenthq.com/docs/api/#/0/Class-A/Get-NFT-Token-IDs-for-contract/lng=en
或者来自 Morallis 的这个:
https://docs.moralis.io/moralis-server/web3-sdk/token#getalltokenids
我想遍历以太坊 ERC-721 合约的所有代币 ID。 有些合约有计数 ids (0, 1, 2, 3, ...) 这很容易,但有些有随机 ids,例如https://etherscan.io/token/0xf87e31492faf9a91b02ee0deaad50d51d56d5d4d#inventory
遗憾的是,etherscan 只显示最后使用的 10000 个令牌 ID,但我想遍历所有 79490 个。 有没有办法做到这一点?对我来说,一切都很好。使用一些 API.
设置我自己的以太坊节点您可以遍历收集合约发出的所有 Transfer()
事件。
您正在寻找转账 from
地址 0x0
(铸造的代币)。并从列表中排除转账 to
地址 0x0
(销毁的代币)。
实现此目的的方法之一是使用 Web3 合约 getPastEvents()
函数 (docs)。
const myContract = new web3.eth.Contract(abiJson, contractAddress);
myContract.getPastEvents('Transfer', {
filter: {
_from: '0x0000000000000000000000000000000000000000'
},
fromBlock: 0
}).then((events) => {
for (let event of events) {
console.log(event.returnValues._tokenId);
}
});
没有简单的方法可以以与合约无关的方式使用以太坊节点来完成它...ERC-712 没有指定任何允许查询所有代币 ID 的接口方法,所以除非你的合约是查看使用顺序令牌 ID,无法从简单的节点查询中猜测所有令牌 ID。
除非您想遍历合约的整个交易历史以获取每个铸造的 NFT 的 ID(为此您需要一个存档节点,因为完整节点不会有完整的交易历史)您应该使用索引所有 NFT activity.
的服务中的 API您可以使用来自 CovalentHQ 的 API: https://www.covalenthq.com/docs/api/#/0/Class-A/Get-NFT-Token-IDs-for-contract/lng=en
或者来自 Morallis 的这个: https://docs.moralis.io/moralis-server/web3-sdk/token#getalltokenids