導入
NFT(Non-Fungible Token、非代替性トークン)は、SPLトークンの仕組みとまったく別物に思えるかもしれませんが、実は同じMint/Token Accountの仕組みを、特定の設定で使っているだけです。
説明
「非代替性(唯一無二)」を表すために、NFTのMintは次のように設定されます。
- 供給量(supply)が1 … その種類のトークンはこの世に1つしか存在しない。
- 小数点以下の桁数(decimals)が0 … 「0.5個」のような分割ができない。
これだけだと「ただの数量1個のトークン」ですが、NFTとして意味を持たせるには、メタデータ(名前・画像・説明などの情報)が必要です。これは Solana のエコシステム標準である Metaplex の Token Metadata プログラムが担当し、Mintアドレスに紐づく形で追加のオンチェーンアカウントとして作られます。
graph TB
M["Mintアカウント<br/>supply: 1, decimals: 0"]
TA["Token Account<br/>owner: 所有者のウォレット<br/>amount: 1"]
Meta["Metadataアカウント(Metaplex)<br/>name, symbol<br/>uri → 画像やJSONの場所"]
M --> TA
M -. 紐づく .-> Meta
Meta -. 参照 .-> Off["オフチェーンのJSON/画像<br/>(IPFS/Arweave等)"]
uri フィールドが指す先には、画像そのものではなく多くの場合 JSONファイル(画像URL・属性などを含む)が置かれます。ブロックチェーン上に大きな画像データを直接保存するのはコストが高いため、実データはオフチェーン(IPFSやArweaveなど)に置き、オンチェーンには「そこへのポインタ」だけを持つ、という設計です。
まとめると、NFTは「新しいブロックチェーンの機能」ではなく、「供給量1・小数点0のSPLトークン」+「メタデータ」という組み合わせにすぎません。第5〜7章で学んだMint・Token Account・PDA・Anchorの制約の知識が、そのままNFT開発の土台になります。
演習
同じコレクションのNFTを10個発行したい場合、Mintアカウントは何個作ることになるでしょうか。「Mintごとに供給量1」というルールから考えてみましょう。
ヒント1を見る
1つのMintの供給量は1個までなので、「唯一無二」を10個作るには……
ヒント2を見る
NFTコレクションの実体は、似た設定・似たメタデータを持つMintが多数存在する集まりです。それぞれ別々のMintアドレスを持ちます。