ブロックチェーン・トークン・NFTを図で理解というお話。
こんにちわ。42 Tokyoというエンジニア養成機関の 2022 年度アドベントカレンダー 25日目を担当します。
秋山です。
42tokyoを休学している間に, ブロックチェーンを利用したアプリ開発などをインターンで半年ほど経験したので私なりのweb3の理解やトークン・NFTの仕組みを簡単な言葉でまとめます。
はじめに
web3(クリプト)は最近耳にする言葉ではありますが, 実際にどのような世界になるのかは人によって考えが違う, または方向性は同じでも構想の深さが違う物だと思います。
私自身, 思想としても技術としてもまだまだ理解が及びません。
とりあえずは「分散型インターネット・またはその上でアプリケーション・サービスが展開される状態」と認識しています。
いずれにせよブロックチェーンをはじめとする分散型台帳が基盤であることは間違いありません。
まずはその辺りから話し始めます。
間違っている部分があれば, 私の勉強になりますので教えて頂けると嬉しいです。
ブロックチェーン
分散型台帳の代表にはブロックチェーンがあります。
ブロックチェーンは, 「AがBにいくら送金する」などの1つの処理をトランザクションと呼び, それらをブロックという単位にまとめて, ブロック同士が暗号学的なルールに従って連結することで形成されます。
ブロックチェーンデータはノードと呼ばれるコンピュータに保存されます。
各ノードは同じデータを所持しています。
ノードは複数存在しそれぞれが直接通信することでネットワークを形成します。
ブロックチェーンに新しいブロックを追加する際には, あるノードからその他のノードに新ブロックが送信され, 新ブロックがルールに従ったものであるか, 中身のトランザクションは過去の履歴と整合性の取れたものであるかが各ノードによって検証されます。
各ノードの立場は等しく, あるノードによる改ざんは他のノードによって検知されます。あるノードがダウンしても他のノードによって継続されます。
そのため, 誰か(個人や企業)の管理したデータベースと対比して, 一点に権利やリソースが集中していない「分散型台帳」と呼ばれます。
ブロックチェーンはノードを動かし, 新たなブロックを形成する人たちによって成り立ちます。
そのため新しいブロックを追加する作業を行った人には暗号通貨を報酬として渡します。
ユーザがブロックチェーン上で取引を行うにはそのチェーンの暗号通貨が必要になるため, ブロックチェーンが普及するにつれその通貨の価値は上がります。
通貨報酬はブロックを形成する人たちのインセンティブとなります。
なのでブロックチェーンは暗号通貨ありきで存在するものです。
暗号通貨の実体はブロックチェーン上に記録された数値です。
過去の履歴から, どのアドレス(ブロックチェーン上ではユーザをアドレスという数字で区別しています)が数値をいくつ持っているかが算出できるようになっています。
またブロックチェーンにおいて, どのノードがブロックを追加するのかの決め方(コンセンサスアルゴリズムと呼ばれます)にはProof of Work や Proof of Stake があります。
データを改ざんするユーザを生み出さないための仕組みとしてとても重要なものです。
ビットコインが採用しているProof of Workについてはこちらの動画がわかりやすかったです。
Proof of Workにおいてトランザクションがどのように処理されるのかについてはこちらの記事がわかりやすかったです。
ブロックチェーンへのアクセス
ブロックチェーンにトランザクションを提出する(誰かに通貨を送金するなど)には署名という作業が必要で, ブロックの検証にはブロック内の署名が本人のものか検証されます。
そこには秘密鍵と公開鍵と呼ばれるものが必要です。
秘密鍵で署名を行い, 検証には公開鍵が使われます。また, 公開鍵を元にアドレスと呼ばれるユーザの識別子が生成されます。
このようにブロックチェーンへのアクセスには秘密鍵と公開鍵が必要で, その2つを管理するツールをウォレットと呼びます。
ウォレットを使用してブロックチェーンにアクセスすることで, ブロックチェーン上の自分の残高の確認や送金作業が可能になります。
ノードを所持していない場合, トランザクションの提出や閲覧はいずれかのノードとHTTP通信を介して行われます。
スマートコントラクト
ビットコインとブロックチェーンの誕生の後に, ブロックチェーンをアプリに利用できるプラットフォーム「イーサリアム」が誕生しました。
イーサリアムやその他のweb3と呼ばれるブロックチェーンには暗号通貨の送受信のみでなくプログラムをブロックチェーン上に記録することができます。
この仕組みによりあらゆるサービスを分散化されたインターネットで展開できるということになります。
スマートコントラクトの実体はプログラムであり, プラグラミングのご経験のある方はクラスと考えるとわかりやすいです。
トークン
貨幣と銀行のような役目を果たすプログラムです。
コントラクト内には, トークンの総量や, アドレスに対してこのトークンをいくら所持しているのかなどの情報を記録しています。
またトークンの送金や残高照会, 発行などの機能を関数として持っています。
例えばゲームのコントラクトとトークンのコンラクトを使えば, ゲーム内の通貨としてトークンを利用でき, そのトークンはブロックチェーン上の他のコントラクトともやり取りが可能です。
上に示したのは一般的なトークンコントラクトの機能の抜粋であり, コントラクトの仕様は作成者の自由です。
基本的な規格(有名なものでERC20)に沿った機能のみ搭載しても良いですし, ゲーム内の経済を調整するためにトークン発行量を変更可能にしておくこともできます。
しかしブロックチェーン上のデータは閲覧可能なので, 誰かに偏って利益になるような仕組みのコントラクトは利用されづらいでしょう。
ブロックチェーン上に自由に展開されるトークンに対し, ブロックチェーンのエコシステムを回すのに使用されているトークン(イーサリアムならETH)をネイティブトークンや暗号通貨と呼び区別しているみたいです。
トークンは作成者や管理者が総量や供給量をコントロールできる(実装による)点がネイティブトークン(暗号通貨)との違いです。
NFT
Non Fungible Tokenの略です。トークンの一種です。
NFTに対し先ほどお話ししたトークンはFungible Tokenなので, ここではFTと呼びます。
NFTはトークンそれぞれを番号で区別しています。
例えば, FTもNFTも総量が50ある場合を考えます。
FTは50ある各トークンを区別していないため, アドレスAが20, アドレスBが10といった具合に各アドレスの残高を数量で管理するだけです。
数量は貨幣が行う物の価値の「測り」を実現します。
一方NFTは50ある各トークン全てを1~50の番号で区別しているため, アドレスAは1番, アドレスBは5番と23番といった具合に各アドレスの保持するトークンを番号で管理します。
さらに各トークンにはURL情報を紐付けられるようになっており, URLに使われるのは画像のリンクなどです。
画像自体をブロックチェーンに保存するのはコストが高くなってしまい, 通常画像は従来のサーバーなどに保存しておきます。
NFTはコントラクト内で固有の番号をアドレスに割り当てます。
そしてブロックチェーン上に存在するコントラクトには固有のアドレスが割り当てられています。また, ブロックチェーンも種類はありますが同じものはこの世に存在しません。
つまり, NFTはこの世で固有の番号をアドレスに割り当てます。
例えばNFTを権利として扱うと, 何かのデジタルデータの所有権(紐づいているデジタルデータ自体はこの世に1つかわからないがNFTはこの世に1つ)となったり, イベントの参加権となったり, 証明書の役割を果たしたりします。
NFTはトークンでありコントラクトの関数を介して他のアドレスに譲渡可能なので, 権利の取引をするアプリケーションも展開可能です。
特にweb3で生まれるサービスは, ブロックチェーンの性質上, 既存企業のように独占するデータがないため, 別のサービスとの相互作用が前提で動いているものが多いと思います。
あらゆるサービスが同じインフラ(ブロックチェーン)上で動いています。
そんな中NFTはいろんな価値体験に繋げられるかもしれません。
ビットコインとweb3
基本でもありわかりやすいため冒頭はビットコインのブロックチェーンの話も出ましたが, ビットコインとweb3と呼ばれる領域やその通貨たちは別物です。
中央管理体の存在なしに希少性を維持できる史上初のデジタル通貨として, ビットコインはその地位を確立しています。
その技術をもとに, アプリケーションに活かすなどの動きから派生したものがweb3と私は理解しています。
ビットコインにはサービスの展開や独自トークンの発行というweb3特有の考え方はありません。
ビットコインの概念についてはこちらがスラスラ読めてわかりやすかったです。
まとめ
デジタルデータが分散的に管理されていることの重要性は, 現状に不満がない場合は気づきにくいのかもしれません。
例えばSNSでアカウントがバンされる経験をしたり, 中央管理体による支配を実感する生活のもとではまた感じ方が違うはずです。
一方である程度管理されているという状態は楽な気もしています。
暗号通貨で送金ミスをしてしまっても, 仲介しているのはプログラムくらいしかいないので文句を言う相手はいません。自己責任です。
分散型インターネットが普及する場合は, ユーザの責任が多くなり自分で管理することも増えるのでその辺りの知識を広めることと, ブロックチェーンにアクセスするインタフェースの質の向上が大切そうです。
私がこの領域で面白いと思うことは, 技術開発の速さです。
例えば
などがあります。
web3はこれから普及するのかどうかの話に関わらず, 開発とその利用がしばらく進んでいく気がするので, どうなっていくのかまたは自分は何ができるのかこれからが楽しみです。
以上で自分の頭の中のものをムリクリまとめましたが読んでいただきありがとうございました。メリクリです。