新着:HeliusがLight Protocolを買収
コレクションのNFT保有者を取得する方法
ブログ/開発

Solana Dev101 - NFTコレクションの保有者を取得する方法(スナップショット)

開発者体験エンジニアXのOwen VenterLinkedInのOwen Venter
読了時間:3分

はじめに

NFTコレクション所有者のスナップショットを取得する方法を知りたい方に最適なガイドです。Heliusでは、DAS APIを使ってスナップショットを簡単に取得できます。

このチュートリアルを進めるには、HeliusアカウントとAPIキーが必要です。こちらから無料で登録して取得できます。 ご不明な点がある場合は、記事の最後にある関連ドキュメントをご覧ください。さらにサポートが必要な場合は、HeliusのDiscordコミュニティに参加するか、TwitterでHeliusをタグ付けしてお気軽にご質問ください。

DAS APIの使用

Digital Asset Standard(DAS)APIは、デジタル資産(トークンやNFTなど)を操作するための統一インターフェースを提供する、オープンソースの仕様およびシステムです。ここでは、DAS APIを使用して特定の資産の所有者を取得します。コレクションのグループ化方法に応じて、いくつかの異なる呼び出しを使用できます。

コレクションアドレスからコレクション内のNFTを取得する(getAssetByGroup)

Metaplex NFT標準の最新バージョンでは、認証済みコレクションが使用されています。これは、コレクションを表すNFTを作成することで実現され、NFTを分類し、コレクション情報をブロックチェーン上で検証できるようになります。コレクション内のすべてのNFTを取得するには、コレクションNFTのミントアドレスであるコレクションアドレスを使用できます。コレクションに属するNFTがある場合は、そのNFTのメタデータを確認し、コレクションセクションでコレクションアドレスを見つけられます。

アドレスを取得したら、DASのgetAssetByGroupメソッドを使用して、それに関連するすべてのNFTを検索できます。以下のコードスニペットでは、ページネーションを使用して10,000個のMad Lads NFTをすべて反復処理する方法を示します。API呼び出しのparamsセクションでは、グループキーとしてコレクションを使用することを指定し、グループ値としてコレクションアドレスを指定します。

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

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

const getAssetsByGroup = 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のクリエイターアドレスは、オンチェーンメタデータのcreatorsセクションで確認できます。

最初のクリエイターを確認したら、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'
    },

この出力は、名前、説明、属性などの必要な情報を追加できるよう、自由に変更してください。getAssetsByGroup APIレスポンスに含まれるデータの詳細は、ドキュメントで確認できます。

まとめ

このブログ記事では、DAS APIを使用してNFTコレクションの保有者に関する情報を取得する方法を解説しました。DAS APIを活用すると、NFTとその所有者に関する有用な情報を簡単に取得できます。ユーザー行動の分析にも、NFTの配布状況の追跡にも、DAS APIが便利なソリューションを提供します。当社のウェブサイトにアクセスしてプランに登録すれば、今すぐDAS APIを無料で使い始められます。

参考資料

Heliusを購読

Solana開発の最新情報や新しい記事の公開通知を受け取れます

拡大画像