本文へスキップ
BecomeCoder

Solanaコース · 第8章 トークンとNFT · レッスン32

NFTの考え方

ローカル実施

導入

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アドレスを持ちます。