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