ブロックチェーン(2)ブロックチェーンの構造と仕組み(マイニング・PoW)
はじめに
前回は、ブロックチェーンの概要を説明しました。今回からは、より具体的なブロックチェーンの構造と、マイニングやコンセンサスアルゴリズム(PoW)といったブロックチェーンの仕組みについて説明します。
ブロックチェーンの構造
図1は、前回で紹介したブロックチェーンの図をもう少し具体的にしたものです。ブロックチェーンは分散型台帳と呼ばれているように、デジタルコインを渡した(output)、受け取った(input)という取引(トランザクション)の記録を、ブロックと呼ばれる単位に分散して格納・保存する技術です。誤解されやすいのですが1取引1ブロックではなく、複数の取引をまとめて1ブロックに格納します。ビットコインの場合、ブロックサイズの上限が1MBと決まっていて、数千件の取引情報が格納されています。
ブロックには、取引情報のほかにヘッダ部があります。ヘッダ部には、前ブロックのヘッダ部のハッシュ値、タイムスタンプ(Timestamp)、採掘難易度(Difficulty Target)、ナンス(Nonce)、ブロックサイズ、バージョン、そして今回の取引のハッシュ値(Markle Root:マークルツリーのルートハッシュ)が格納されます。以下、順番に説明しましょう。
ナンス
ナンス(Nonce)とは、Number used onceの略で「1回限り使われる数字」という意味です。主に暗号通信で使われる32ビットの数値で、役割は「ある条件を満たすハッシュ値」を見つけることです。ビットコインの場合、ある条件とはハッシュ値の先頭に0がn桁並ぶ(Targetとして与えられる目標値より小さくなるハッシュ値を見つける)というものです。
前回のまとめで「ハッシュ関数のアウトプットは予想がつかない(意図的にハッシュ値を作れない)」と書きました。条件を満たすハッシュを見つけるのは宝くじを買うようなもので、特別なロジックがあるわけではないため手当たり次第やってみるしかありません。ナンスの値を変更しながらヘッダ情報をハッシュ化し、当たり(0がn桁並ぶ数値)が出るまでひたすら処理を繰り返すのです(図2)。
ブロックチェーンでは、当たりのナンスを見つける作業のことをマイニング(発掘)と呼び、それを行う人(ノード)のことをマイナー(発掘者)と呼びます。
マイナー
ビットコインには、参加者(マイナー)がいます。マイナーと利用者は別者で、手を上げて参加した人(ノード)だけがマイナーとなって、10分に1回行われるマイニング競争ゲームに参加します。
これも勘違いされやすいのですが、ブロックチェーンの記録は、ブロックチェーンを利用する人のパソコンに記録されるわけではありません。マイナー(ノード)のコンピュータにのみ記録されます。
なぜ、参加者はマイニング競争に参加するのでしょうか。それは、いち早く当たりのナンスを発見したノードに発掘報酬と手数料としてコインが与えられる仕組みになっているからです(図3)。付与といってもP2Pなので誰かからもらうわけではなく、天から授かる感じです。coinbaseと呼ばれる取引情報(送信者がいなく、マイナーがコイン受領者となる取引)が自動的に発生するわけです。
発掘報酬は約4年で半減するように設計されていて、2020年5月からは1ブロック当たり6.25BTC(ビットコイン)になっています。手数料は取引の際にかかる手数料(振込み手数料のようなもの)で、ブロックに格納される取引情報の容量によって決まります。
条件を満たすナンスは1つとは限りませんが、意図的にそう簡単には見つからないようになっています。ビットコインの場合、コンピュータの処理能力が上がるにつれて難易度が調整される仕組みになっていて、いつの時代でもだいたい10分くらいで見つかるように調整されています。
報酬はブロックごとに行われるナンス発見コンペごとに勝者へ与えられます。今回のブロックの発掘競争が終われば、すぐ次のブロックの競争に入ります。こんな競争が10分単位で延々と繰り返され、多くのノードで膨大な量の試行錯誤的な計算が行われているのです。
採掘難易度
なぜ、わざわざ膨大な計算処理を行わせるようになっているのでしょうか。それは、マイニングに大量の計算処理が必要という仕組みがシステムの安全性の根幹になっているからです(このあたりの説明は次回で行います)。
この目的のために調整される値が採掘難易度(Difficulty Target)で、ビットコインでは先頭に並ぶべき0の数です。マイナーは、マイニング競争に勝つために高い性能を持ったコンピュータに設備投資します。当たりくじを引く(条件に合ったナンスを見つける)には、他者よりも多くくじを引く方が有利だからです。
時代とともにコンピュータの性能は飛躍的に高まっており、CPUからGPUに切り替わり、今では消費電力が小さいマイニング専用ASICが主流です。今後は量子コンピュータも使われるかも知れません。また、発掘に参加するノードが増えれば、その分早く発掘できる可能性も高まります。
ある程度(ビットコインの場合は10分)の計算時間がなければマイニングに成功しないことを維持するためには、時代とともに採掘難易度を高くする必要があります。そこで約2週間に1回、マイニングの平均時間を計測して、それが10分になるように難易度の調整(retargeting)が行われているのです。正確には2週間ではなく2016ブロックごとに調整しており、これを1ブロック10分で計算するとちょうど14日となります。
P2Pネットワークが面白いのは、中央管理者がいないため採掘難易度の調整をそれぞれのノードが自主的に行うということです。それなら難易度を下げてズルできそうですが、後述するコンセンサスアルゴリズムにより、各ノードの検査でズルが発覚する仕組みになっています。
コンセンサスアルゴリズムとPoW
いち早くナンスを見つけたノードは、それを他のノードに報告して検証してもらいます。そして「確かにこれは当たりナンスだ」と認めてもらえれば、掘り当てたマイナーのブロックがチェーンにつながり、コイン報酬をもらえます。
ポイントは、条件を満たすナンスを見つけるには膨大な計算が必要になるのに対し、それを検証するのは簡単なことです。その報告されたナンスを使って今回のブロックのハッシュ化を行い、確かに先頭に0が指定数以上並ぶことを確認するだけで良いわけです。
なぜ、たった1人の勝者に対して、残り全員の敗者が“負けを認める”ようなルールがうまくまわるのでしょうか。その仕組みとなるコンセンサスアルゴリズムについて説明しましょう。
コンセンサスアルゴリズム「PoW」とは
コンセンサスアルゴリズムとは、不特定多数の参加者の間で合意(コンセンサス)を得るための仕組みを表す言葉です。コンセンサスアルゴリズムにはいろいろな種類がありますが、ここではビットコインで採用されているPoWについて説明します。
PoW(Proof of Work)は、言葉通りに説明すると「(大変な)作業を行ったことを(みんなで)証明する)という意味のコンセンサスアルゴリズムです。例えば、宝くじの下4桁が6243となるくじを引くという競争をみんなで行ったとしましょう。いち早く当たりくじを引いた人がその画像をWebに登録し、参加者が「ああ、確かにこれは6243だ(チキショー、今回は負けた)」と確認するようなイメージです。
宝くじの場合は、当たりくじをみずほ銀行が確認すれば良いのですが、ブロックチェーンはピアツーピアなのでみずほ銀行のような中央管理者が存在しません。そのために、参加者がみんなで認めるコンセンサスアルゴリズムが必要となるのです。
この「中央管理者がいるかいないか」がWeb2.0とWeb3の大きな違いです。ネットバンキングのように銀行がすべての取引をリアルタイムで記録する集中管理と違い、ビットコインはピアツーピアです(図4)。
では、中央管理者がいないのにどうやって取引記録を行い、安全性を担保するのか、その仕組みを説明していきましょう。
PoWの仕組み
PoWの仕組みを図5にまとめました。この図に沿ってPoWの流れを説明しましょう。
①ブロードキャスト
取引が発生すると、ネットワーク上のすべての参加者(マイナー)にその情報がブロードキャスト(broad cast:一斉送信)されます。ただし、図4左のような集中管理であれば、銀行と利用者は1対nなのでブロードキャストは簡単ですが、ピアツーピアの場合は数千ものノードが直接つながっていません。そのため、ノードからノードへ高速にリレー方式で情報が伝わる必要があります。
ビットコインのマイナー間でピアツーピアに情報伝搬を行うのがビットコインネットワークです。2015年にBitcoin relay netwaorkと呼ばれる方式が作成され、低いレイテンシー(通信の遅延時間)でマイナー間のブロックを高速に同期できるようになりました。翌2016年にはFIBER(Fast Internet Bitcoin Relay Engine)に置き換わりました。これは、UDPベースのリレーネットワークで、レイテンシーをさらに削減しています。
UDP(User Datagram Protocol)は、ネットの動画配信や音声通話などで標準的に使われている通信技術です。TCPなどの通信は、最初に通信相手と正しく接続できたか確認するコネクション型ですが、UDPは確認なしに一方的にデータを送るコネクションレス型通信です。通信の信頼性は下がりますが、その代わりに高速でデータ送信できる利点があります。
②トランザクションの蓄積
先ほど1取引1ブロックではなく、数千件の取引をまとめて1ブロックに格納すると述べました。これもまた誤解されやすいのですが、ブロードキャストはブロックではなく、取引単位で送信されます。そして、直接ブロックに格納されるのではなく、いったん各ノードのトランザクションプールに蓄積され、各ノードがそこから選んでブロックに格納するのです。
つまり、ブロックのマイニング競争は一斉スタートではありますが、ブロックに格納している取引情報は違うのです。同じブロックでコンペするわけじゃないんだってことにびっくりしますね。マイニングコンペはハッシュ値を見つける競争ですが、マイニングの速度は取引情報と相関関係はありません。もちろん、元情報が異なるのでたまたまハッシュ値が見つけやすいこともあるでしょうが、それも含めて運の要素が含まれるコンペなのです。
例えるなら、綿を積んだトラックでレースをするようなものです。積める積荷の大きさは1MBと決まっていますが、それはレースに影響しません。そして、レースは同じ道で競うのではなく、トラックごとに走る道が異なります。ゴールは見えず、道ごとにゴールまでの距離も異なり、だいたい10分は走らないとゴールインできません。パワーのある速いトラックは有利ですが、どの道を選んだかという偶然が味方することも少なくないのです。
取引情報を選ぶところに手数料が微妙に関係してきます。ビットコインの取引量が多くなり、トランザクションプールに貯まる情報がさばききれなくなると、手数料の安い取引情報は積まれにくくなります。ビットコインは送金処理して相手が使えるようになるまでにタイムラグがあります。取引情報がブロックに積まれてから約10分間のマイニングコンペを行っている間は取引が確定しないからです。さすがに古い取引情報がいつまでもトランザクションプールに置かれたままにはなりませんが、10分で1MBずつという制限がビットコインの決済が遅い原因になっています(後述しますが、実際はさらに決済が遅延します)。
③マイニングと成功の報告
マイナーは、トランザクションプールから取引情報をブロックに積んでマイニング競争を行います。これ、中央管理者がいないのに「よーいどん」の合図は誰が鳴らすのでしょうか。答えは「前のブロックの検査合格」です。ブロックの検査合格とともに、休む間もなく次のブロックのマイニング競争が始まるのです。そして、最初に発掘に成功(当たりナンスを見つけた)した者は、そのナンスを含むブロックの情報をすべての参加者にブロードキャストします。
④各ノードによるブロックの検証
参加者は、報告されたブロックの内容を検証します。この検証は、当たりナンスであることだけではありません。例えば、各ノードで保有しているトランザクションと突き合わせて、既に使用済みのコインが使われていないかという二重使用の検査や難易度は適正かなどのチェックも含まれています。これらの検査をクリアしたブロックだけが受け入れられ、不合格のブロックはそのまま捨てられてしまいます。捨てられたブロックの取引情報は、取引が確定せずにトランザクションプールへ戻されます。
⑤ブロックの接続
各ノードの検査で過半数が正しいと確認した時点で、マイナーは発掘成功を認められ発掘したブロックがチェーンにつながります。このタイミングで発掘者は「ブロック報酬」と「取引手数料」として一定のコインが得られます。
⑥ブロックの情報の共有
ブロックチェーンは分散ネットワークということで、発掘に成功したノードだけがそのブロック情報を保持すると誤解されやすいです。でも、それだとそのノードが死んでいるときに情報が取れません。前回説明したようにブロックの情報は過去も含めて参加者で共有しており、検査で合格した時点で各マイナーの保持している既存ブロックにその新しいブロックが連結されます。その結果、各ノードが同じブロックチェーン情報を持つわけです。
実は、古い取引情報を持たない軽量クライアント(Lightweight Client)として、当たりの検証だけ行う参加も認められています。 ただし、ほとんどのマイナーはすべての情報を持つFull nodeで、二重使用などの検査などを行っています。
ブロック報酬と手数料
ビットコインなどの仮想通貨は、埋蔵量に限りがあると聞いたことがある人もいると思います。デジタルの通貨なのに金山のような埋蔵量の概念があるって不思議に思われますね。実は、多くの仮想通貨はスタート時に発行上限が決められており、通貨が多く出回りすぎてインフレを起こさないようにしているのです。
世界中の中央銀行がデジタル通貨の発行を検討しています。日本でも2023年4月に財務省が「デジタル円」について新たな有識者会議を立ち上げ、検討を始めることになりました。こうした国の通貨であれば中央銀行が発行量をコントロールできるので、インフレになれば減らし、デフレになれば増やすといったコントロールが可能です。
一方、ビットコインは中央管理者のいないピアツーピアの仮想通貨なので、中央管理者が発行量を増減したり「上限に達したので終了」と宣言して止めるわけには行きません。そのため、2009年に誕生したときに発行上限が2100万枚となるように半減期ルールが設定されています。
マイナーは、ナンスを見つけてブロックを生成する見返りに一定の報酬をもらいます。ただし、与えられる報酬はブロックの増加(=コインの発生量)とともに減っていきます。ビットコインの場合、当初(2009年)は1ブロックで50ビットコインが報酬として与えられましたが、2012年には25ビットコイン、2016年には12.5ビットコイン、2020年には6.25ビットコインと、約4年を周期に半減しています。
実際は、発掘されたブロック数が21万ブロックとなったら半減するというルールなのですが、1ブロック10分という採掘速度になるように採掘難易度がコントロールされているので、結果的に約4年(21万ブロック * 10分 ≒ 4年)の半減期となっています。
円やドルなどの通貨は、中央銀行が発行しているので基本的に価値が保証されています。一方、仮想通貨はそのようなオーソリティ(信頼機関)がないので保証がありません。また、ビットコインの発行量はロジックで決められており、景況などに応じて調整できないので、場合によって価格の暴落を引き起こすのではと不安に思うかもしれません。
でも、そういう意味では金やプラチナも似たようなものです。半導体基盤に積んだり装飾品に使ったりする用途はありますが、それ以上に価値あるものとしてみんなが認めているからこそ、高い価格を維持しているのです。
仮想通貨は、デジタルゴールドと呼ばれる場合があります。枯渇資源であること、他の商品と交換できること、発掘が大変なこと、偽造ができないこと、劣化しないこと、金とプラチナで値段が違うように仮想通貨によって価格が違うこと、など金とよく似ています。金と同じような金融資産と考えると、保証がない、発行量をコントロールできない、なども問題ないように思えます。
まとめ
第2回の今回は、以下の内容について学習しました。
- ブロックにはヘッダと取引情報が含まれ、ヘッダのハッシュが次のブロックのヘッダに入る
- 参加者(マイナー)は当たりナンスを早く見つけるマイニングゲームに参加している
- 取引情報は各マイナーのトランザクションプールに蓄積され、マイナーが選んでブロックに積む
- 当たりナンスを見つける時間は約10分間。見つけた者は発掘報酬と手数料をもらう
- 当たりは参加者全員で検証し多数決で合否を決定する。その際に取引情報のチェックも行う
- ビットコインなどの仮想通貨の多くは半減期ルールにより発行量が定められている。
次回は、ブロックチェーンの取引情報のメカニズムや暗号化、UTXOと呼ばれる残高管理、チェーンが分岐した場合に、どのように戻るのかなどを説明していきます。お楽しみに!
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- ブロックチェーンの取引情報の管理とチェーンの維持
- イーサリアムで見る「PoS」と「PoI」の仕組み
- PoWにおける多数決方式とハードフォーク
- Web3の概要とブロックチェーン(1)
- IoT×ブロックチェーンで業界常識を破壊する- ハッカソン最優秀賞「Cargochainプロジェクト」とは
- エンタープライズグレードのブロックチェーンを発展させる「Hyperledger」とは
- ベルリンのスタートアップに聞いてみた!BrickBlock―ブロックチェーン技術の開発に関わる面白さと彼らの見る未来とは?
- 「DApps」と「メタバース」
- Lightning Networkが動作する仕組み
- Lightning Networkの送金処理で使用されている技術【前編】