如何获得 NFT 集合的持有者(快照)

如果您对如何捕捉 NFT 收藏品所有者的快照感到好奇,那么您来对地方了。借助 Helius,通过使用 DAS API 可以轻松拍摄这些快照。 要学习本教程,您需要一个 Helius 帐户和 API 密钥,您可以通过在此处注册免费获取该帐户和 API 密钥。如果您有任何疑问,可以参考帖子末尾的相关文档。此外,请随时加入 Helius Discord社区或在Twitter上标记 Helius以寻求进一步帮助。

如何获得 NFT 集合的持有者(快照)
如何获得 NFT 集合的持有者(快照)

介绍

如果您对如何捕捉 NFT 收藏品所有者的快照感到好奇,那么您来对地方了。借助 Helius,通过使用 DAS API 可以轻松拍摄这些快照。

要学习本教程,您需要一个 Helius 帐户和 API 密钥,您可以通过在此处注册免费获取该帐户和 API 密钥。如果您有任何疑问,可以参考帖子末尾的相关文档。此外,请随时加入 Helius Discord社区或在Twitter上标记 Helius以寻求进一步帮助。

使用DAS API

数字资产标准(DAS)API是一个开源规范和系统,为与数字资产(代币、NFT等)交互提供统一的接口。我们将使用 DAS API 来获取特定资产的所有者。根据集合的分组方法,我们可以使用几种不同的调用。

通过集合地址从集合中获取 NFT(getAssetByGroup)

最新版本的 Metaplex NFT 标准采用经过认证的集合。这是通过创建一个 NFT 来表示集合来实现的,这允许对 NFT 进行分类并在区块链上验证集合信息。要检索集合中的所有 NFT,可以使用集合地址,即该集合 NFT 的铸币地址。如果您有属于集合的 NFT,您可以查看 NFT 的元数据并在集合部分找到集合地址。

NFT 集合元数据

获得地址后,我们就可以使用 DAS 的 getAssetByGroup 方法来搜索与其相关的所有 NFT。以下代码片段演示了我们如何使用分页来迭代所有 10000 个 Mad Lads NFT。在 API 调用的参数部分中,我们将指定使用集合作为组键,然后提供集合地址作为组值。


const fs = require("fs"); // Required to save the snapshot to a file

const url =
  "https://mainnet.helius-rpc.com/?api-key=";

const getAssetsByAuthority = async () => {
  console.time("getAssetsByGroup"); // Start the timer
  let page = 1;
  let assetList = [];

  while (page) {
    const response = await fetch(url, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        jsonrpc: "2.0",
        id: "my-id",
        method: "getAssetsByGroup",
        params: {
          groupKey: "collection",
          groupValue: "J1S9H3QjnRtBbbuD4HjPV6RpRhwuk4zKbxsnCHuTgh9w",
          page: page,
          limit: 1000,
        },
      }),
    });
    const { result } = await response.json();

    const owners = result.items.map((item) => ({
      NFTAddress: item.id,
      OwnerAddress: item.ownership.owner,
    }));
    assetList.push(...owners);
    if (result.total !== 1000) {
      page = false;
    } else {
      page++;
    }
  }
  const resultData = {
    totalResults: assetList.length,
    results: assetList,
  };
  console.log("Owners: ", resultData);
  fs.writeFile("output.json", JSON.stringify(resultData, null, 2), (err) => {
    if (err) throw err;
    console.log("Data written to file");
  });
  console.timeEnd("getAssetsByGroup"); // End the timer
};
getAssetsByGroup();

根据第一个经过验证的创建者从集合中获取 NFT (getAssetByCreator)

要与第一个经过验证的创建者拍摄快照,您需要使用“getAssetByCreator”函数并在参数中提供创建者的地址。您可以在其链上元数据的创建者部分找到 NFT 的创建者地址。

NFT 验证创建者元数据

验证第一个创建者后,在调用 getAssetsByCreator 时将该地址设置为创建者地址。


const fs = require("fs"); // Required to save the snapshot to a file

const url =
  "https://mainnet.helius-rpc.com/?api-key=";

const getAssetsByCreator = async () => {
  console.time("getAssetsByCreator"); // Start the timer
  let page = 1;
  let assetList = [];

  while (page) {
    const response = await fetch(url, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        jsonrpc: "2.0",
        id: "my-id",
        method: 'getAssetsByCreator',
      params: {
        creatorAddress: 'D3XrkNZz6wx6cofot7Zohsf2KSsu2ArngNk8VqU9cTY3',
        onlyVerified: true,
          page: page,
          limit: 1000,
        },
      }),
    });
    const { result } = await response.json();

    const owners = result.items.map((item) => ({
      NFTAddress: item.id,
      OwnerAddress: item.ownership.owner,
    }));
    assetList.push(...owners);
    if (result.total !== 1000) {
      page = false;
    } else {
      page++;
    }
  }
  const resultData = {
    totalResults: assetList.length,
    results: assetList,
  };
  console.log("Owners: ", resultData);
  fs.writeFile("output.json", JSON.stringify(resultData, null, 2), (err) => {
    if (err) throw err;
    console.log("Data written to file");
  });
  console.timeEnd("getAssetsByCreator"); // End the timer
};
getAssetsByCreator();

输出

在上面的所有代码片段中,我们输出每个 NFT 的地址和相应的所有者。


 		{
			NFTAddress: 'J61tzxTJ1gqe1Z8orSQtNmvZUG27fokmcPcobdB3sZXz',
      ownerAddress: 'Dar5nrE6XWqv9vAi9o6enUQsamEJKq2zgxjNywncZpYj'
    },

请随意修改此输出以添加任何必要的信息,例如名称、描述或属性。有关 DAS 响应中包含的数据的详细信息可以在DAS 文档中找到。

结论

在这篇博文中,我们讨论了如何使用 DAS API 检索有关 NFT 集合持有者的信息。借助DAS API,您可以轻松获取有关NFT及其所有者的有价值的信息。无论您是想分析用户行为还是跟踪 NFT 的分布,DAS API 都提供了便捷的解决方案。您现在就可以通过访问dev.helius.xyz并注册计划开始免费使用 DAS API 。

💡
原文链接:Solana Dev101- How to get the holders of an NFT collection (Snapshot)
本文由SlerfTools翻译,转载请注明出处。

SlerfTools专为Solana设计的工具箱,致力于简化区块链操作,提供无编程全可视化界面,使发币管理流动性无代码创建Dapp等复杂过程变得安全简单。