ビットコイン相場で話題の「マイニング(採掘)」って何?
繰り返すと、「ナンス探し」という仕事(計算)をして"当たり"のナンスを見つけることがブロック生成であり、このブロック生成でブロックに含まれている「取引」が承認されたと見なされる。こうした仕組みは「プルーフオブワーク(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 Log10(2256)≒77.06であり、10進数では先頭の数値が取れる範囲に制約がでる。なお、1012が1兆、1016が1京と数えていくと1068で1無量大数(一般的な数え方)となり、78桁の数は1無量大数より大きい。数の表現については後述のテラやペタなども含め、安井義浩(2018)「大きな(または小さな)数字の表し方-単位の話に出てくる数の表記の仕方など」『研究員の眼』2018-10-23が参考になる。