コラム
2021年05月31日

「マイニング」とは何か

経済研究部 准主任研究員   高山 武士

このレポートの関連カテゴリ

フィンテック(FinTech) 世界経済 などの記事に関心のあるあなたへ

btn-mag-b.png
基礎研 Report Head Lineではそんなあなたにおすすめのメルマガ配信中!
各種レポート配信をメールでお知らせするので読み逃しを防ぎます!

ご登録はこちら

twitter Facebook このエントリーをはてなブックマークに追加 Pocketで後で読む

文字サイズ

3――「マイニング」とは何か

さて、ここまでビットコインのデータイメージについて大まかに説明してきた。ここからは、いよいよ「マイニング」について説明したい。
 

By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended.

上記は、ビットコインを考案したとされるサトシ・ナカモトの論文からの引用である7(太字・下線は筆者)。
下線部分を意訳すれば、
 
「ブロック」を作成した人が「新しいコイン」を得る事ができ、この「新しいコイン」を安定して獲得し続けることは、採掘者が金を掘って金を流通させていくことに似ている。我々の(コインの)採掘ではCPUの時間と電力が使われる

となる。このサトシ・ナカモトの論文の比喩表現を用いて今日でも「ブロック」を作成する試みのことを「マイニング」と呼んでいると見られる。したがって、マイニングを理解するには、「ブロック」の作成について理解できれば良いことなる。そして、「ブロックが作成される」ことは、そこに含まれている「取引」の「承認」であるため、重要な仕組みである。

つまり、この「ブロック」作成の仕組みを理解することが、「AからBへの送金(移転)取引はどのように承認されているのだろうか、不正取引をどのように防いでいるのだろうか」の手がかりになる。

図表1に書いた「ブロック」では、「ブロック」を構成するものは数本の取引だけであったが、実際の「ブロック」にはより多くの情報が記載されている。図表5のように、「ブロックヘッダ」と呼ばれる部分を持ち、この部分がとりわけ重要で、いくつかの情報が付加されている。この情報は、具体的には「親ブロック(図表5の場合はブロック#1)ヘッダのハッシュ値」「マークルルート(Merkle Root)」「タイムスタンプ(Timestamp)」「採掘難易度(Difficulty Target)」「ナンス(Nonce)」である8

8 これらの先頭にソフトウェアのバージョン情報も付加される。
(図表5)「ブロックヘッダ」
一気に専門用語だらけになってしまったが、順に解説していきたい。

まず、「タイムスタンプ」は現在の時刻のことでイメージは湧きやすいと思われる。「マークルルート」は専門用語で聞きなれない言葉だと思われる。これも重要なデータだが、長くなるため、詳しい説明は割愛したい。簡潔に言えば「マークルルート」は「ブロック」に含まれる取引の束(図表5のブロック#2の場合は「取引3」~「取引5」)から得られる、これらの取引を要約した数値と言える。「採掘難易度」はブロック生成の難しさを表した数値である。そして「ナンス」については後述したい。

そして、先頭にあるハッシュ値は「データから算出した小さな値。各データを区別・表現する目的に用いる」(Wikipedia)などと解説されているが、ブロックチェーンを理解する上では重要な概念と思われるので、例(イメージだが)を挙げて説明してみたい。

そこで、ここでは次のような関数を考えてみる(なお、これはあくまでもハッシュ値のイメージのために筆者が勝手に作成したアルゴリズムで、ビットコインに使われているハッシュ値とは全く関係ない)。
関数
例えば、「12345」という数値に☆を適用してみる。まず各桁の数を足し合わせて「1+2+3+4+5=15」である。次にもとの数値をその15でわるので、「12345÷15=823あまり0」となる。したがって「12345」のハッシュ値(ここでは「☆値」と呼ぶことにする)は「0」となる。もとの数値を1だけ増やして「12346」として適用してみると、「1+2+3+4+6=16」となり「12346÷16=771あまり10」なので☆値は「10」である。このように、☆値は元の数値より小さく、元の数値を少し変えただけで☆値が大きく変わることがある。これは(☆値ではない)一般的なハッシュ値にも言える性質である。
 
さて、ここで再び図表5の「ブロック#2」を考えていこう。ヘッダを構成する「ブロック#1ヘッダのハッシュ値」「マークルルート」「タイムスタンプ」「採掘難易度」「ナンス」はすべて数字である。そこで例えば「ブロック#1ヘッダのハッシュ値」を「6」、マークルルートは「345」、タイムスタンプは「0525」、採掘難易度は「1」としてみよう9
 
9 親ブロックの数値は適当、マークルルートは「取引3・4・5」が含まれていることから、タイムスタンプは「5月25日」から、採掘難易度は「一番容易」ということから1の数値を選んだが、もちろん本物のビットコインのブロックヘッダに格納されている数値はもっと複雑である。ただし、いずれにしても数字の羅列である。

そうすると、ブロック#2のヘッダ部分は「634505251???」という数値になる。

ここで、最後の「???」に相当する「ナンス」については説明していなかったが、マイニングでは実はこの数値が重要である。「ナンス」の数値は外部から与えられるものではなく、「ナンス」はネットワーク参加者(採掘者)が探しあてる数値である(図表5で「ナンス」を黄色にしているのは金発掘のイメージのため)。

では、採掘者はどのような「ナンス」(「???」の数値)を探しているのだろうか。それは、ブロックヘッダからハッシュ値を計算したときに、そのハッシュ値が閾値(target)を下回るような「ナンス」である。この閾値を下回るとブロックが作成される(そこに含まれる取引が承認される)。
 
これを具体例で示してみたい。ここでは閾値としてハッシュ値(この例では「☆値」)が10未満となるような「ナンス」を探している状況を想像してみる。

採掘者がナンスとして「001」を選んでブロックヘッダの「☆値」を計算してみたとする。この場合、「ブロック#2のヘッダ」=「634505251001」(下3桁がナンスで今回は「001」)となり、この☆値は25である10。☆値が10以上であるためブロックは作成できない。
 
10 6+3+4+5+0+5+2+5+1+0+0+1=32で、634505251001÷32=19828289093あまり25

次にナンスとして「045」を選んでみる。この場合、「ブロック#2のヘッダ」=「634505251045」であり、☆値は5となる11。☆値が10未満であるためブロックが作成できる。
 
11 6+3+4+5+0+5+2+5+1+0+4+5=40で、634505251001÷40=15862631276あまり5

したがって、「ブロック#2」は「ヘッダ部分」が「634505251045」、これに「取引リスト」が加わったものとして作成できる(前掲図表5)。これ以外の「ナンス」でも☆値が閾値以下になるような「ナンス」であればブロックは作成できるが、どの“あたり”の「ナンス」がブロックとして採用されるかは早いもの勝ちである(1番早く見つけられた“あたり”の「ナンス」でブロックが作成される)。

また、「ブロック#2」のヘッダである「634505251045」の☆値となった「5」は「ブロック#3」のヘッダの先頭部分12の数字となる(「ブロック#2」ヘッダの先頭部分が「ブロック#1」のヘッダのハッシュ値であったことと同じ)。
 
12 実際にはソフトウェアのバージョン情報がさらに先頭につく(脚注8と同様)。

このように前ブロックのヘッダ部分のハッシュ値が次ブロックに組み込まれていることから、ブロックがチェーン状に繋がっているイメージが持てる。そのため、このブロックの連なりがブロックチェーンと呼ばれる。そして、前のブロックが作成されてはじめて次のブロックのヘッダに格納すべき数値が分かる。そのためブロックは1列にしかつながらず、いわばブロックのハッシュ値はその前までに繋がっているブロックすべての情報が集約されているのであり、これがチェーンの役割を果たしていると言える。

このブロック作成で重要なのは、もちろん「ナンス探し」であるが、これは“あてずっぽう”で探すしかない(今回の例で「☆値」をやや込み入った計算にしたのは、“あてずっぽう”でしか探せなさそうな雰囲気を出すためでもある)。

また、先ほど述べたように“あたり”の「ナンス」探しは早いもの勝ちである。早くナンスを探せた参加者(ノード)はブロックを作成し、その報酬として新しいコインを得ることができる13。それ以外の参加者(ノード)には報酬はなく、次のブロックでナンス探しをしなければならない。
 
13 取引リストに含まれている取引の手数料も得ることができる。

繰り返すと、「ナンス探し」という仕事(計算)をして“あたり”のナンスを見つけることがブロック生成であり、このブロック生成でブロックに含まれている「取引」が承認されたと見なされる。こうした仕組みは「プルーフオブワーク(PoW:Proof of Work)」と呼ばれている14。仕事をしたという証拠(“あたり”のナンスを見つけたこと)が取引を承認させているのである。取引の承認は管理者によりなされるのではなく、「ナンス」探しという仕事(計算)の結果、ある参加者が適切な結果を得た(閾値以下の「ナンス」を見つけた)という結果でなされている(そして後述するように、これには大量の電力を消費することがある)。
 
14 プルーフオブワークはビットコインに限らず一般的に使われる用語で、ある課題(仕事)に取り組んだこと(そして成果をだしたこと)をもって「証拠」とする(取引の承認根拠とする)という仕組みのことを指す。

これで、前述の「AからBへの送金(移転)取引はどのように承認されているのだろうか。」とい疑問の回答が得られた(回答は、「ブロックの作成によりなされている」)。ただし、まだ「不正取引をどのように防いでいるのだろうか」という疑問は解消されないかもしれない。

この疑問についても説明していきたいが、その前に、閾値の設定について触れておきたい。閾値が大きければ適当に選んだ「ナンス」が“あたる”確率は高まり、発見されやすくなり、閾値が小さければ適当に選んだ「ナンス」はなかなかあたらずに発見されにくくなることから、この閾値の調整をどうするのか、という点は重要であるからだ。

結論を述べれば、ビットコインでは、10分間に1回、どこかの参加者がナンスを見つける、というように難易度が調整される15。具体的には2016ブロック(1ブロック10分換算で20160分、つまりちょうど2週間)毎に、想定時間(20160分)より早くブロック作成されたとすれば難易度が上がり、それより遅ければ難易度が下がるというように調整される(この難易度の数値はブロックヘッダ内にも含まれている(前掲図表5))16。なお、この10分という時間の根拠は不明なようだが、「ブロック」がネットワーク参加者に共有されるのに必要な時間といったの意見があるようである。
 
15 したがって10分に1回新しいコインが誕生している(採掘されている)ことになる。ただし、ブロック生成で誕生する(採掘される)ビットコインは幾何級数的に減少する。ビットコインが生まれた当初(2009年)は1ブロックで50ビットコインが報酬として与えられていたが、12年11月には25ビットコインに半減、16年7月には12.5ビットコインにさらに半減、20年5月には6.25ビットコインにさらに半減している。この報酬が半減する周期は半減期と呼ばれる(実際は前回の半減期が高さ63000のブロック、次の半減期が高さ84000のブロックというようにブロック数で決まっているが、10分に1ブロック生成されるよう採掘難易度がコントロールされていることから半減期が約4年周期であることが分かる)。
16 (「ナンス」には桁数制限があるため)難易度が高い場合、すべての「ナンス」を調べても“あたり”が見つからないという可能性もあるのではないか、と疑問を持つ人もいるかもしれない。その通りである。ただし、ブロックヘッダに「タイムスタンプ」があるため、時間が経過してこのタイムスタンプの数値が変わるたびに(たとえば1秒毎に)“あたり”が変わるので、延々に見つからないという事はなく、いつかは発見されるだろうという期待が持てる(本コラム上の「タイムスタンプ」の例では月日だけしか使わなかったが、実際のビットコインはもっと細かい時刻を記録している)。ちなみに、ブロックの取引リストの先頭に保管される生成取引(マイニングによる報酬として生まれた取引)にも数値を格納する部分があり、ここも「拡張ナンス(extra nonce)」として使われる。ここに数値を適当に格納することで「マークルルート」の値が変わり、(拡張ではない)“あたり”の「ナンス」が変わる。このように、計算を続ければいずれ“あたり”が見つかるという工夫もされている。

したがって、ネットワーク参加者が増えたり、マイニング(「ナンス探し」)に使うCPU・GPUの性能が向上するなどして、閾値以下の「ナンス」が発見されやすくなると、2016ブロックを作成する時間が20160分(2週間)より短縮され、閾値の設定が下がり難易度が上がる。マイニングには常に一定の計算時間を費やさなければならないようになっている

上の☆値は1桁や2桁の数だったが、実際のビットコインのブロックヘッダのハッシュ値の計算はSHA-2(SHA256)と呼ばれるハッシュ関数(アルゴリズム)が用いられており、その結果の数値(出力)が取り得る値は2進数の桁数で256桁、16進数で64桁、10進数だと78桁である。桁数(長さ)で見ると長い訳ではないが、数としては相当大きな数である17
 
17 Log10(2256)≒77.06であり、10進数では先頭の数値が取れる範囲に制約がでる。なお、1012が1兆、1016が1京と数えていくと1068で1無量大数(一般的な数え方)となり、78桁の数は1無量大数より大きい。数の表現については後述のテラやペタなども含め、安井義浩(2018)「大きな(または小さな)数字の表し方-単位の話に出てくる数の表記の仕方など」『研究員の眼』2018-10-23が参考になる。

具体的に、執筆時点でのビットコインのブロック作成の閾値を見てみよう。

【ブロックヘッダハッシュの閾値(Target)】(以下2進数・16進数・10進数の3種類で標記しているがすべて同じ数値)
「1011001111001110100100000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000」(2進数)
「b3ce90000000000000000000000000000000000000000」(16進数)
「1076379879376199359324913638762382564863378102643851264」(10進数)

これだけ見ると、閾値も大きな数に思えるが、ハッシュ値がとりうる数と比較するとかなり小さい数であることが分かる。

例えば、2進数でみると閾値の桁数は(上記枠内の桁数は目で数えるのは大変だが)180桁となっている。ハッシュ値の総桁数は(2進数で)256桁なので、ランダムにハッシュが生成されたとして、256桁のハッシュがおおよその閾値である180桁より小さい数値になれば“あたり”といえる。

この可能性を256桁のすべての(2進数の)数字のうち先頭76桁がゼロとなる数字が見つかる割合とみなせば、確率的に1/276≒1.32×10-23となる18。また、この逆数は7.56×1022となる。

つまり、現在“あたり”の「ナンス」を探すには、おおよそ7.56×1022回のハッシュ計算(発掘作業)が必要となっていることが分かる19。10分間(600秒)で“あたり”の「ナンス」が発見されるように難易度は調整されるので、1秒当たりでおおよそ1.26×1020のハッシュ計算(発掘作業)が行われていることになる20

この1秒あたりの計算量はハッシュレート(Hash Rate)と呼ばれ1012を表す単位T(テラ)や1015を表す単位P(ペタ)、1018を表す単位E(エクサ)を使い、たとえば126EH/s(エクサハッシュ毎秒)などと表される。実際の「マイニング」に利用されている計算量は、図表6の通り激増している21。筆者の7年前のパソコンでは起動できたとしても、おそらく“あたり”のナンスは発見できないだろうし、宝くじを買って“あたる”可能性の方が高そうだと思える程度に“あたり”は少ない(しかし、誰かが約10分に一度“あてている”のも確かである)。
 
18 2進数では各桁はゼロか1の2通り取り得るが、先頭76桁がすべてゼロである必要があるため1/278となる。約100垓(京の1つ上の単位)分の1である。閾値がキリの良い数値でないため、例えば先頭76桁がすべてゼロでもその後の2桁が11だと閾値を超えてしまうが、そのあたりは捨象している。
19 276≒7.56×1022(“あたり”の「ナンス」を探すために必要な計算量)
20 1.26×1020×600(秒)=7.64×1022
21 図表6で示したハッシュレートは直近で約145EH/sであり、本文中の必要ハッシュレートよりやや大きいのは途中の確率を計算する際に捨象した部分があるためと思われる(脚注18参照)。
twitter Facebook このエントリーをはてなブックマークに追加 Pocketで後で読む

このレポートの関連カテゴリ

経済研究部   准主任研究員

高山 武士 (たかやま たけし)

研究・専門分野
欧州経済、世界経済

アクセスランキング

レポート紹介

【「マイニング」とは何か】【シンクタンク】ニッセイ基礎研究所は、保険・年金・社会保障、経済・金融・不動産、暮らし・高齢社会、経営・ビジネスなどの各専門領域の研究員を抱え、様々な情報提供を行っています。

「マイニング」とは何かのレポート Topへ