はじめに
この記事では、NFTアートを理解するにあたり、「前提知識」となる下記の用語を整理してみました。NFTプロジェクトに関わる事になり、知識が必要になったため、学習をかねて整理しています。
NFTの世間一般のイメージ
世間一般のNFTのイメージは
「似たようなパターンの絵が並んだ、値段がつく画像コレクション」
といったところでしょうか。
この認識でも良いのですが、NFTをプロジェクトを進めるにあたり何かと不都合が多いです。
今後NFTアートプロジェクトを進める人に向けて、この記事では必須となる前提知識を解説していきます。
基礎知識①:ブロックチェーン
ブロックチェーンは、 複数のコンピュータで状態を分散的に蓄積し続ける仕組み です。
世界中のコンピュータで状態を管理するので、どこかのコンピュータが故障したり間違った取引を扱ったとしても、残りの複数のコンピュータが状態を検証し、正しい状態を保存し続けます。
ブロックチェーンでは、チェーンが始まって以来の 「状態遷移の履歴」をすべて保存 しています。Ethereumチェーンの場合は15秒に一度、その時点の状態履歴が保存されていきます。
状態の遷移をつど検証し、正しい状態を維持し続けることで参加コンピュータが報酬がもらえる仕組みになっているため、正しい状態が維持されつづけています。
その性質を利用して我々は価値を保存しています。 例えば「誰が何のトークンをいくつ持っているのか」「誰が何のNFTを持っているのか」という世界中の参加者の状態を世界中のコンピュータで確認し、保存しています。
Ethereumは15秒ごとに1回、新しい状態を保存します。保存間隔はブロックチェーンの種類によって異なります。
ウォレットアプリは、ウォレットアプリが参照するブロックチェーンのサーバーの一つに問い合わせる事によって実現されています。
ブロックチェーンは世界中の参加者の状態を保存し、保証する仕組みであります。
だからこそ、誰が通貨をもっているか、誰がNFTを持っているかという保有の状態を保証することができる、というわけです。
前提知識②:FTとNFT
FTとは
通貨のような枚数で表現されるトークンは 「Fungible Token(以下FT)」 と表現されます。一般的な暗号資産、いわゆるBATやSANDやUNIといった通貨は、FTにあたります。
Fungibilityとは
FTのFにあたる「Fungible」は 「代替可能性」 という意味です。
FTであるBATを1枚持っていた場合、他の人が所有する1BATと交換できます。1BATは誰がどこで保有していようが同じ1BATであることには変わりありません。通貨の交換可能なこの性質のことを代替可能性、 「Fungibility」 と呼びます。経済学の概念です。
普通の数字で保有数を表現する暗号資産は、だいたいこのFTである、と覚えておいて間違いはありません。
NFTとは
「NFT」はFTに否定接頭辞がついた言葉です。「NFT」の正式名称は「Non Fungible Token」です。つまり代替可能性をもたないトークンです。
「NFT」は、FTとは違い、発行されるトークン1枚1枚がすべて異なるもの であるように設計されています。そのため「NFT-Aのトークン番号1のトークン」と「NFT-Aのトークン番号2のトークン」とあったとした場合、それぞれ異なるものでかつ、等価であることはわからないので、等価で交換することはできないもの、とみなされます。
つまり代替可能性のないトークンとなっています。
データ構造で理解するブロックチェーン上のFungibility
FTとNFTのデータ構造の概要を理解すると、
FTのどうFungibilityが実装されているか、逆にNFTにはなぜFungibilityがないかを直感しやすいです。
少し遠回りになりますが、両者の保有を表現するデータ構造をみていきましょう。
FTのデータ構造
ブロックチェーン上で、誰がいくつのFTを持っているかを、どう表現しているのでしょうか。
ブロックチェーンにはコントラクトという概念があります。コントラクトは状態変更のルールと状態の保存を行なっている機構です。トークンひとつにつき、一つのコントラクトが存在します。まずここでは、トークンごとに用意された箱のようなものだと認識してください。
誰がいくつのトークンを持っているかは、このコントラクトに保存されています。
保存方法は以下の通りです。アドレスが、いくつののFTを持つかが、列挙されて保存されています。
FTトークンは1枚1枚同じもので、区別をつけませんので、FT1枚1枚を区別するようなデータの持ち方がされていません。あくまでFTトークンは数量でしか表現されていません。
NFTのデータ構造
NFTもFTと同様に、トークン1つに対して1つのコントラクトが対応しています。
ところがNFTのデータは、別な手法で表現されます。NFTは1枚1枚ユニークなトークン番号が割り振られていて、番号ごとにどのウォレットが所有しているかの状態を保存しています。
データ構造から見ても、Aさんが保有する101番のトークンと、Bさんが保有する102番のトークンを交換しようとした場合、数字を入れ替えるだけではできないな、というのは直感できます。
フェアに価値を評価して交換をする場合、外部から両者の価格を判定するような仕組みを注入して、両者の価格を一度なにかしらのトークンの数量に判定して交換、価格が高い方はおつりももらえる、といったことをしないと交換は実現しなそうです。
注 - 補足
NFTにもFTのようにウォレットごとに何個持っているかを示す保存機構(_balances)があります。NFTでは、これに加えて、直前で解説したトークン番号とウォレットの組み合わせを保存する機構(_owners)を持っているという構造です。_ownersはFTにはありません。
FTとNFTのデータ構造まとめ
FTでは、「誰がいくつの数量をもっているか」のみで表現されています。
NFTでは、「何を誰が所有しているか」を表現します。
これがFTとNFTのデータの持ち方の違いで、このデータの持ち方の違いをみると、ブロックチェーンにおけるそれぞれのFungibilityの有無を、実感することができます。
NFTはトークン番号しか保存していない
NFT「何を誰が所有しているか」と書きました。
何とは、トークン番号の事です。
NFTの保存状態を理解するために、先ほど下記の図を示しました。
NFTというと画像を保有しているイメージがありますが、ブロックチェーンで表現される実態は、ただの数字、トークン番号だけです。
上記の図は、説明するための誇張でもなく、実態です。ブロックチェーン上ではユーザー(ウォレット)は、数字の保有しか表現されていません。
でもNFTというと、さまざまな種類の画像に溢れていて彩り豊かなイメージがあります。画像を保有している、という感覚があります。
次の項目では、この認識ギャップを埋めるべく、実際の仕組みと照らし合わせながら説明していきます。
NFTの実態
NFTの実態は単なる番号
NFTは、前出の通り、トークン番号とウォレットアドレスをペアを保存する事によって、ウォレットによるトークンの所有を示しています。
実はウォレットのNFT所有については、これしか保存されていません。保存されているのはこれだけです。
NFTに画像データは含まれていません(ただし、フルオンチェーンのNFTは除く)。
世間一般からすると NFT= 画像 というイメージがあるかと思うので、
ここで、もしかしたら「あれ?」と思う方もいるかもしれません。
実は、画像は外部のストレージに保管されています。
NFTの画像は外部のストレージに保存されている。
外部のストレージと繋ぐのが、コントラクトに入っているbaseURIです。
NFTを発行するコントラクトがbaseURI(ベースとなるURI)を持ち、トークンのコントラクトが、外部ストレージを特定する大元のURLを持っていて、それを組み合わせる事によって、画像にアクセスします。
ブロックチェーンのトークン番号と、ブロックチェーン外のストレージを組み合わせる事によって画像の所有を表現しています。ブロックチェーンで完結していない点、ここがポイントです。ただ、フルオンチェーンNFTは除きます。フルオンチェーンはブロックチェーン内で完結するようにできていますが、話がかなりややこしくなるので、ここでの紹介は省きます。
要はNFTはアンカリング
要はNFTがやっていることは、番号の所有を全世界のコンピュータで保証しつつ、その番号に紐づく外部ストレージのデータのアンカリングをしている、ということとなります。
要は、僕はこのURLを持っています!ということをブロックチェーンの世界で表現しているのが、NFT、ということになります。