
SolanaにおけるNFT圧縮の探究
暗号資産の世界における近年の進歩の一つが、デジタル資産、一般に非代替性トークン、略してNFTと呼ばれるものの登場です。NFTは、アート作品、ゲーム内アイテム、チケットなどのデジタル資産を検閲耐性のある形で所有できるようにし、これらの資産を扱う活発なピアツーピア経済も実現します。実際、NFTは、デジタル通貨という概念に続き、暗号資産分野でプロダクトマーケットフィット(PMF)を達成した2番目の主要なアプリケーションだと言えるでしょう。
しかし、NFTに課題がないわけではありません。
特にSolanaでの大きな課題は、これらの資産をオンチェーンに保存するコストです。Solanaはトランザクション手数料が非常に低い一方、ストレージ費用については事情が異なります。デジタル資産がデジタル世界に真に普及するには、その保存コストをできる限り誰もが負担できる水準にする必要があります。そこで登場するのが、SolanaのNFT圧縮です。
NFT圧縮により、開発者やクリエイターは大量のNFTを大幅に低いコストでミントできるようになり、暗号資産を活用した次世代アプリケーションを実現できます。ゲーム内アイテムが取引可能なNFTであり、ゲーム経済が世界経済の他の部分とシームレスに統合されているMMORPGを想像してみてください。こうしたゲームには当然、数百万、さらには数十億ものアイテムが含まれ、Ethereumのようなブロックチェーンでミントするには莫大な費用がかかります。NFT圧縮なら、Solana上で今すぐ実現できます。
その威力を確認するために、例を見てみましょう。Polygon(Ethereumのスケーリングソリューション)では現在、NFTのミントに約0.05 USDかかります。つまり、Polygonで約10億個のNFTをミントするには、約5,000万ドルが必要です。
Solanaでは圧縮を使用すると、NFT 1個あたり約0.0000005 SOLとなり、本稿執筆時点で10億個のNFTにかかる費用は約11,000 USDです。これは約5,000万ドルの差、つまり3桁ほど安いことになります。これが圧縮の力です。
では、圧縮はどのように機能するのでしょうか。詳しく見ていきましょう。
NFT圧縮では、開発者やクリエイターはNFTデータの大部分を台帳に保存できます。台帳への保存はオンチェーンストレージよりはるかに安価です。一方、そのデータのデジタルフィンガープリントは、Merkle Treeの形式でSolanaブロックチェーン上に保存します。インデクサーのデータが何らかの形で改ざんされると、そのデジタルフィンガープリントがオンチェーンのフィンガープリントと一致しなくなるため、データの完全性が保証されます。
Solana NFTの基礎知識(任意)
圧縮について詳しく見る前に、まずSolanaでNFTがどのように機能するかを確認しましょう。Solana NFTにすでに精通している場合は、次のセクションまで読み飛ばしてかまいません。
Solana上のトークンは、mintアカウントとtokenアカウントという2種類のアカウントを使用します。mintアカウントには、供給量など、トークンに関するグローバルな情報が含まれます。tokenアカウントは、そのトークンを別のユーザーアカウントに関連付けます。
たとえば、ユーザーAが1500 USDCを受け取ると、ユーザーAのメインユーザーアカウントから派生したUSDC tokenアカウントに、そのトークンが保存されます。このプロセスはすべてのトークンに適用されます。ユーザーAに100 USDTを送信する場合、Transfer Programは、ユーザーAのUSDT tokenアカウントが存在しなければ最初にそれを導出し、存在する場合は検索します。
現実世界で、通貨ごとにメインの財布の中へ異なる小銭入れをいくつも用意するようなものです。ユーロは一つの小銭入れに、ドルは別の小銭入れに保管します。しかし、メインの財布はユーザーであるあなたのものです。
SolanaのNFTは、供給量が1つだけのトークンです(つまり、1つしか存在しません)。Metaplexは、NFTにmetadataアカウントを関連付けるToken Metadata Programも導入しました。metadataアカウントには、名前、シンボル、コレクション、そしてもちろんNFT画像自体などの情報が含まれます。これ自体が非常に奥深いトピックなので、ここではこれ以上詳しく説明しません。
圧縮の基礎知識
圧縮の目的は、オンチェーンに保存するデータ量を削減することです。これは、データ(画像のメタデータなど)をSolana台帳上のMerkle treeに保存し、そのルートをオンチェーンに保存することで実現します。
インデクサーは、そのtreeに関係するすべてのトランザクションを処理し、Merkle treeの最新状態を維持します。ユーザーはインデクサーからデータをすばやく取得できます。オンチェーンのルートにより、プログラムとのやり取りが有効かつ安全であることが保証されます。また、ユーザーはインデクサーのデータをオンチェーンのルートと照合し、データが最新かつ有効であることを確認できます。
少し待ってください。Merkle treeとは何でしょうか。
Merkle treeは、大量のデータの完全性を迅速かつ効率的に検証できるデータ構造です。データを「leaf」と呼ばれる小さな単位に分割し、それらのleafを徐々に大きな「node」へと組み合わせることで機能します。
tree内の各nodeは、その子nodeのハッシュを表します。親nodeは子nodeのハッシュを組み合わせて、独自のハッシュを作成します。この処理は、すべてのleafがtreeの最上部にある単一のハッシュへ統合されるまで繰り返されます。このハッシュは「root hash」と呼ばれます。個々のleafをすべて確認しなくても、root hashを使って、tree内のすべてのデータが完全で変更されていないことを検証できます。
Solanaの圧縮は、account compression programによって実現されています。このプログラムにより、開発者はroot hashを保存するMerkle treeアカウントを作成できます。その後、新しいleafを追加したり、既存のleafを置き換えたりできます。leafを置き換えるには、「proof path」が必要です。これは、対象のleafとroot hashの計算に必要なすべてのnodeを含む、tree内の最小の部分集合です。圧縮プログラムはproofをroot hashと照合し、データが有効であることを検証します。treeの実際の内容はオンチェーンに保存されないため、この処理が必要です。
まとめると、圧縮プログラムを使うことで、開発者はMerkle treeを作成し、tree内のアイテムを追加または更新できます。各操作はSolanaトランザクションを通じて実行されるため、treeの履歴はSolana台帳上で確認できます。インデクサーやRPCプロバイダーが停止した場合、または開発者がプロバイダーを切り替えたい場合でも、treeの履歴を再実行することでtree全体を再構築できます。
最後に、データの検証とセキュリティのため、treeのルートがオンチェーンに保存されます。これらを組み合わせることで、状態をオンチェーンに保存する必要がなくなり、コストを削減してデータを実質的に「圧縮」できます。
圧縮について開発者がよく抱く懸念は、「依存しているRPCプロバイダーが侵害されたり、サービスを停止したりしたらどうなるのでしょうか。もう打つ手はないのでしょうか」というものです。答えは「いいえ」です。すべてのトランザクションはチェーン自体に引き続き保存されるため、誰でもそれらを再実行してチェーンの現在の状態を導出できます。RPCプロバイダーは、現在の状態へ手軽にアクセスするための「キャッシュ」と考えることができます。
NFT圧縮
NFT圧縮は、Bubblegumというプログラムによって実現されています。Bubblegumは圧縮プログラムを使用して各NFTをMerkle treeに保存し、mint、token、metadataアカウントを不要にします。これにより、圧縮NFTを非常に低コストで利用できます。
圧縮NFTのミントは、Merkle treeに新しいアイテムを追加するだけです。追加される各アイテムには、NFTの名前、コレクション、所有者などの情報が含まれます。ミントに加えて、Bubblegumは次のメソッドも提供します。
- Transfer
- Burn
- Delegate, CancelDelegate
- Burn
- Redeem, CancelRedeem
- Decompress
- VerifyCreator, SetAndVerifyCreator
- VerifyCollection, SetAndVerifyCollection
これらのメソッドを使い始めるためのドキュメントも、こちらに用意しています。
圧縮NFTの読み取り
圧縮NFTを読み取る最も簡単な方法は、Digital Asset Standard(DAS)APIを使用することです。これは、トークンを照会するための統一インターフェースを提供する、オープンソースの仕様およびシステムです。このシステムは、すべてのBubblegumトランザクションを処理し、Merkle treeを保存するインデクサーによって動作します。さらに、このAPIでは、クリエイター、コレクション、所有者を指定してNFTを照会できます。読み間違いではありません。DAS APIは圧縮NFTだけでなく、通常のSolana NFTにも対応しています。つまり、単一のAPI呼び出しだけで、オンチェーンのmintlistを取得したり、ユーザーやプログラムが保有するすべてのNFTを驚異的な速度で確認したりできます。
このAPIについてもドキュメントを用意し、使い始めるためのサンプルコードもこちらで提供しています。
圧縮のユースケース
本稿の執筆時点で、圧縮の公開からまだ数週間しか経っていませんが、すでに優れたユースケースの開発が進んでいます。例をいくつか紹介します。
デジタル資産の未来を構築しましょう
圧縮NFTを使ってみたいですか?今すぐHeliusで開発を始められます。HeliusはNFT圧縮に対応し、DevnetとMainnetの両方でDAS APIを提供しています。メールアドレスやクレジットカード情報を入力しなくても、Solanaウォレットを接続するだけで、こちらから無料でAPIキーを生成できます。圧縮NFTをミントする方法がまだ分からない場合は、オープンソースの圧縮サンプルリポジトリをご覧ください。皆さんが何を構築するのか、楽しみにしています。
関連記事
Heliusを購読
Solana開発の最新情報や新しい記事の公開通知を受け取れます


