高度

NFTデータの保存とインデックス化

Last updated February 24, 2026

Summary

NFTデータの保存とインデックス化では、圧縮NFTの状態がトランザクションに保存され、Metaplex DAS APIを通じてクエリ可能になる方法を説明します。このページでは、バリデーターからエンドユーザーAPIまでのリファレンスインデックス化アーキテクチャについて説明します。

  • cNFTデータはオンチェーンアカウントではなく、トランザクションログに保存されます
  • DAS APIは便利な検索のためにこのデータをリアルタイムでインデックス化します
  • リファレンス実装は、Geyserプラグイン、Redisキュー、インジェスタープロセス、Postgresデータベースを使用します

概要で述べたように、圧縮NFT(cNFT)が作成または変更されるたびに、対応するトランザクションが台帳にオンチェーンで記録されますが、cNFTの状態データはアカウントスペースに保存されません。これがcNFTの大幅なコスト削減の理由ですが、利便性と使いやすさのために、cNFTの状態データはRPCプロバイダーによってインデックス化され、Metaplex DAS APIを通じて利用できます。

Metaplexは、DAS APIの参考実装を作成しており、一部のRPCプロバイダーは特定の実装にこのコードの一部またはすべてを使用していますが、他のRPCプロバイダーは独自のものを作成しています。Metaplex DAS APIをサポートする他のRPCプロバイダーのリストについては、"Metaplex DAS API RPC"ページを参照してください。

Metaplexのリファレンス実装であるDAS APIには、以下の主要な項目が含まれています:

  • Solanaノーヴォートバリデーター - このバリデーターは、コンセンサスの下でバリデーター台帳とアカウントデータへの安全なアクセスのみを持つように構成されています。
  • Geyserプラグイン - プラグインは「Plerkle」と呼ばれ、バリデーター上で実行されます。プラグインは、アカウントの更新、スロットステータスの更新、トランザクション、またはブロックメタデータの更新があるたびに通知されます。cNFTインデックス化の目的では、プラグインのnotify_transactionメソッドは、BubblegumまたはSPLアカウント圧縮トランザクションがバリデーター上で確認されるたびにトランザクションデータを提供するために使用されます。実際には、これらのトランザクションはSPLノープ(「ノー・オペレーション」)プログラムから来ており、これはSPLアカウント圧縮とBubblegumによって、イベントをSPLノープ命令データに変換することでログの切り捨てを回避するために使用されます。
  • Redisクラスター - Redisストリームは、各タイプの更新(アカウント、トランザクションなど)のキューとして使用されます。Geyserプラグインは、これらのストリームに入るデータの生産者です。Geyserプラグインは、Flatbuffersプロトコルを使用するPlerkleシリアル化フォーマットにデータを変換し、シリアル化されたレコードを適切なRedisデータストリームに配置します。
  • インジェスタープロセス - これは、Redisストリームからのデータのコンシューマーです。インジェスターは、シリアル化されたデータを解析し、それをPostgresデータベースに保存されるSeaORMデータオブジェクトに変換します。
  • Postgresデータベース - アセットを表すいくつかのデータベーステーブル、および確認したマークルツリーの状態を保存するための変更ログテーブルがあります。後者は、Bubblegum命令で使用されるアセット証明を要求する際に使用されます。マークルツリーの変更のためのシーケンス番号も、DAS APIがトランザクションを順不同で処理できるようにするために使用されます。
  • APIプロセス - エンドユーザーがRPCプロバイダーからアセットデータを要求する際、APIプロセスはデータベースからアセットデータを取得し、リクエストのためにそれを提供できます。

Notes

  • DAS APIはSolanaプロトコル自体の一部ではありません。RPCプロバイダーによって維持されるインデックス化レイヤーです。
  • RPCプロバイダーによって実装が異なる場合があります。Metaplexのリファレンス実装はGitHubでオープンソースとして公開されています。

Glossary

用語定義
DAS APIDigital Asset Standard API — インデックス化されたcNFTデータをクエリするためのRPC拡張
Geyserプラグイントランザクションとアカウント更新に関するリアルタイム通知を受け取るSolanaバリデータープラグイン
Plerkleインデックス化のためにBubblegumと圧縮トランザクションをキャプチャするMetaplexのGeyserプラグイン
spl-noopトランザクションログの切り捨てを回避するために命令データとしてイベントを発行するために使用されるSolanaプログラム
インジェスターRedisストリームからトランザクションデータを消費してPostgresに保存するプロセス