Solana NFTは単なるJPEGではない

以前は、NFTは単なるデジタル画像だと思っていました。

Solana上で1週間かけて構築してみた結果、その見方は変わりました。devnet上でNFTの作成、メタデータの付与、コレクションの整理に時間を費やしました。

学んだことを以下にまとめます。

Solanaにおいて、NFTは独立したアセットタイプではありません。

通常のトークンと同じSPLトークンモデルを使用しています。具体的には、以下を使用します:

  • Mint account
  • Token account
  • Owner wallet

唯一の違いは設定です。トークンをNFTにするには、以下のルールを設定します:

  • Supplyを1にする
  • Decimalsを0にする
  • ミント後にMint authorityを無効化する

Mint authorityを無効化することで、発行枚数は永久に固定されます。新しいアセットカテゴリのように見えますが、実際には同じアーキテクチャに異なるルールを適用しているだけなのです。

メタデータがNFTに意味を与えます。私はMetadata Extensionを使用して、名前、シンボル、URIを追加しました。

NFT自体は画像を保存していません。オンチェーンに大容量ファイルを保存するのはコストが高すぎるからです。代わりに、NFTはURIを保存します。このURIはオフチェーンのJSONファイルを指しています。ウォレットがNFTを表示する際、オンチェーンのメタデータを読み取り、URIを辿って画像を見つけ出します。

また、コレクションについても学びました。GroupおよびMember extensionを使用して、複数のNFTを1つのコレクションNFTに紐付けました。

これはデータベースにおける親子関係のようなものだと考えてください。

  • コレクションが「親」です。
  • NFTが「メンバー」です。

この関係性はオンチェーン上に存在します。単なるアプリの機能ではありません。アカウントデータを調査すれば、誰でもそのNFTが特定のコレクションに属しているかどうかを確認できます。

NFTの更新テストも行いました。名前を変更したり、URIを更新したりしました。変更は即座にオンチェーンで反映されます。しかし、ウォレット内の画像はすぐには変わらないことがあります。これは、ウォレットがメタデータをキャッシュしているために起こります。オンチェーンのデータは正しいのですが、表示レイヤーの更新に時間がかかるのです。

大きな教訓:仕組みを決めつけないこと。アカウントを調査し、データを検証すること。

NFTは、Solana上の他のすべてのアセットと同じ基盤(mints、accounts、program rules)から構築されています。画像はユーザーのためのものであり、アセットを定義するのはその構造なのです。

出典: https://dev.to/devduchess/understanding-solana-nfts-as-a-web2-developer-more-than-just-jpegs-5ekm