本文へ移動
hanzochang

技術と実践のノート

NFTアートの基礎知識 | ブロックチェーン・NFT・コントラクト

公開

著者:株式会社hanzochang

NFTアート作成に必要な前提知識の習得を目的とした記事です。ブロックチェーン・FT・NFT・コントラクトに関する基礎知識を速習することができます。NFTアートの作りたいと思っているクリエイターやエンジニア向けに情報を整理しました。

はじめに

この記事では、NFTアートを理解するにあたり、「前提知識」となる下記の用語を整理してみました。NFTプロジェクトに関わる事になり、知識が必要になったため、学習をかねて整理しています。

  • ブロックチェーン
  • FTと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、ということになります。

💡余談:画像保存先の外部ストレージの永続性について

外部ストレージのデータがもし消えてしまったら、NFTの参照先は失われます。つまり画像は消えます。

例えばWeb2的なサービス、AWSやGoogleCloud上など参照させたとした場合、サービス改変による消失リスクや、料金未払いによるストレージ消失リスク等をかかえることになります。つまり永続性がない、という状態とも言えます。

なので、永続性をある程度担保するために、IPFSと呼ばれる分散ストレージを利用するという手もあります。世の中的にはこちらが推奨されている手段となっています。

ですがIPFS自体も、永続的に保管を補償されているものではない点に注意です。サーバー運営者が、当該画像を保存するインセンティブがないと、サーバー保有者が保存し続ける理由がないので、消えてしまいます。

IPFSそれ自体は維持インセンティブを設計に含んでいないので、インセンティブを与える仕組みをもつIPFS外のサービスを経由しデータをアップロードすることにより、永続性をある程度担保していくアプローチが必要です。

例えば、Pinataや、Arweaveといったサービスを使うことは一つの手です。

まとめ

FTとNFTについて、保有者との対応づけをどう保存するか、そのデータ構造を確認しながら、 それぞれのトークンの「Fungibility」の違いについて解説していきました。

次のコントラクトの章では、トークンごとがどういう単位で区分けされていて、保存されているのか、実際のデータをみながら理解を深めていきます。

基礎知識③:コントラクト

ブロックチェーンは、複数のコンピュータで状態を分散的に蓄積し続ける仕組み と書きました。 十数秒に一度、ブロックチェーンは状態変化を記録していきますが、誰もが自由に状態を変更できるわけではありません。

コントラクトが担っていること

状態の変更のルールは「コントラクト」(Contract Account)によって定義されています。 コントラクトは、状態の変更のルールの他に、状態の保存や、第三者への状態の提示を担っています。

トークンごとに独立したコントラクトがある。

FT や NFT は、これらひとつずつに、独立した「コントラクト」があります。

下記はFTやNFTが保存している実データの実例です。(22年6月5日時点) このように、コントラクトごとに独立してデータを保存します。

コントラクトに何が保存されているのか

それぞれのコントラクトに、誰が何を持っているのかが保存されています。 FT であれば、アドレスごとに保有枚数が記録されており、 NFT であれば、トークン番号ごとに保有者のアドレスが記録されています。

NFT の URL はコントラクト内に保存されている。

NFT のコントラクトは、内部に ベースとなる URL を保持しています。 例えば有名なNFTであるBAYCの場合「 ipfs://QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq/ 」といったものです。 このベースとなるURL がトークンの画像の置き場所を示します。

トークン番号に対応したいURLを取得したい場合は、コントラクトにトークン番号を問い合わせれば、このベースとなるURLユーザーが持つトークン番号を組み合わせ、トークンがアンカリングする URL を導出します。

コントラクトごとにデータは独立している

トークンごとにコントラクトは独立しています。NFTはコントラクトごとにそれぞれ独自のbaseURIが保存されています。

コントラクトには「規格」がある

コントラクトには「規格」があります。

ネジ等の部品には規格があります。規格を統一する事によって、だれがパーツを作ったとしても組み合わせられるといったメリットを得ることができます。ネジに限らず、世の中のあらゆる製品や部品には規格が定められています。

コントラクトも同様に規格があります。規格があることにより、コントラクトを利用するアプリケーションが、どのコントラクトでも同じような手法で操作ができるようになっています。

  • FT ...「ERC20」
  • NFT ...「ERC721」「ERC1155」

例えば NFT の ERC721 には、トークンに紐づく URL を出力する機能が定義されています。これはtokenURIと呼ばれる機能です。

この機能がどのコントラクトでも定義されているからこそ、アプリケーションは、NFTの画像を簡単に取得することができます。これは共通化されているからこそできることです。

仮に NFTのURL 取得方法がコントラクトごとに違って入れば、アプリケーションが1つ1つコントラクトに合わせて画像の取得を実装せねばならず、コストがかかりすぎてしまい、現実アプリケーション側は実装できません。

今日の Opensea のようなマーケットプレイスも存在しなかったと言えます。これは規格があるからこそ、です。

💡 NFTの規格ってどんなもの?

すこし専門的な内容になりますが、NFT の ERC721(+ERC721Metadata)では下記の機能をお約束として持ちましょうと定められています。

  • トークンの名前を教えてくれる機能
  • トークンの単位名を教えてくれる機能
  • トークン番号に対応した URL を教えてくれる機能
  • コントラクトのベースとなる URL を教えてくれる機能
  • 特定のウォレットのアドレスの人の、このコントラクトの NFT の保有数を教えてくれる機能
  • トークン番号は、誰のものかを教えてくれる機能
  • トークン番号保持者が、指定したウォレットに指定したトークン番号を転送することを、許可する機能
  • トークン番号の転送を許可された先のアドレスを取得する機能
  • ウォレットが持つトークンの全てを、指定したウォレットアドレスに転送許可・不許可する機能
  • オーナーが持つすべてのトークンが、転送先に転送を許可されているかどうかを確認できる機能
  • 特定のトークン番号を自分が保有していれば、特定のアドレスに転送できる機能
  • 事前に、転送先の存在や、承認が取れているかどうかを確認した上で
  • 特定のトークン番号を、転送先へのウォレットが許可がされていれば、指定したアドレスに転送する機能
👀合わせて確認したい参考事例

(エンジニア向け) より実態を確認したいのならば、NFTのコントラクトの作成に使われる、ライブラリのコード参照すると良いです。

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.solhttps://docs.openzeppelin.com/contracts/3.x/api/token/erc721

https://docs.openzeppelin.com/contracts/3.x/api/token/erc721

まとめ

以上、この記事ではNFTアートの理解に必要な前提知識を解説しました。 簡単にまとめると、下記です。

  • ブロックチェーン

    • 複数のコンピュータで状態を分散的に蓄積し続ける仕組みである。
    • 上記の仕組みを利用し、価値の保存をおこなっている。
  • NFT

    • ブロックチェーンに記録されている所有データである。
    • ひとつひとつが独立しているトークンである。
    • ブロックチェーンでは単なる番号の所有しか意味しない。画像はブロックチェーン外部にある。
    • トークン番号と、ベースとなるURLを組み合わせる事によって、外部のデータをアンカリングしている。
  • コントラクト 

    • 状態の保存方法と状態変更のルールを定義したものである。
    • NFTやFTごとに、コントラクトは独立している。
    • NFTのコントラクトごとに、ベースとなるURLが定義されている。
    • NFTやFTには共通規格が定められている。

この記事を書いた人

Webプランナー、開発会社の創業メンバーを経て、Fintech・DX・Web3の企画・開発に従事。2021年に独立し、2023年に株式会社hanzochangを設立。現在はAIを活用した業務改善と、自社サービス「指定管理者制度AI」の開発・運用に取り組んでいます。

半澤勇大のXアカウント(新しいタブで開く)

この記事の株式会社hanzochangについて
少し紹介させてください!

この記事に関連する当社のサービス

Web3アプリ開発受託サービス

ウォレット連携やNFTを、使いやすいアプリに。

Solanaなどのブロックチェーンを使ったアプリを、企画・検証から開発・運用まで支援します。ウォレット連携やコントラクトだけでなく、利用者が操作する画面までまとめて設計します。

サービスの詳細を見る
Jくんが接続されたアプリを組み立て、鉛筆で原稿を作るイラスト。Web3サービス開発とコンテンツ作成を表す。
  • 企画・技術検証

    事業の目的に合わせ、必要な機能と技術を検討。

  • アプリ・連携開発

    ウォレットやコントラクトと画面を一体で開発。

  • 公開・運用支援

    公開後の保守や機能改善まで継続して対応。

Web3アプリの開発について、お気軽にご相談ください。