Proof of Work

しかし、採掘者ならだれでも、広報されたトランザクションをチェックして、新しいブロックを作り、それを元帳に書き込めるとなると、悪い採掘者が居て、トランザクションを改変したりして、それをチェック済みと偽って広報してしまうという恐れがある。

このため、ブロックをブロックチェインにつなぎこむ権利、つまり、正当な取引の記録として元帳に書き込む権利を得るためには、Proof of Workという作業を行う必要がある。

図6に示したように、ブロックは、ブロックヘッダという部分と元帳に追加するトランザクションの集まりからできている。そしてブロックヘッダには、Merkle RootのHash値という欄があり、この部分には、そのブロックに入れる各トランザクションのHash値を計算し、次に、2つのトランザクションのペアのHash値を繋いだものをHashするというようにバイナリツリー状に組み合わせて行って、最後に1つのHash値にまとめた値を書き込む。

このMerkle RootのHash値によって、ブロックに入れたトランザクションの値が書き変えられていないことを確認することができる。そして、タイムスタンプはこのブロックが作られたおおよその時刻を示す。

次の難易度とnonceというのがビットコインのProof of Workシステムのカギになる部分である。ブロックヘッダの部分のHashを計算すると、SHA-256ハッシュであるので256ビットのランダムな値が出てくる。つまり、256ビットのそれぞれが、0になるか1になるかは半々の確率である。従って、最上位の10ビットがすべて0になるのは、平均的に2の10乗回に1回ということになる。この256ビットを整数と考えると、Hashの値が(2256-1)/1024以下になるのは、平均的に1024回に1回と考えることもできる。

ビットコインではこのブロックヘッダのHash値が、目標とする値(ターゲット値呼ぶ)より小さくなった時にだけ、新しいブロックの正当性が確認されたとみなす。

図6のブロックヘッダの中にnonceという32ビットの欄があり、この値を変えると、ブロックヘッダのHash値が変わるので、採掘者はnonceの値を取り換えながら、ひたすらブロックヘッダのHashを計算し、ターゲット値より小さな値が得られるまでこの作業を繰り返す。そして、条件を満たすnonce値が見つかると、ブロックヘッダのnonce欄に書き込んで、Proof of Workが終わったので、ブロックをチェインに繋ぎこむことをネットワークに広報する。

このProof of Work作業は、大量の岩石を掘り出して、その中から金を見つけるような作業であることから、採掘(Mining)と呼ばれる。

ここでは、Proof of Workに成功すると。ブロックチェインに繋ぎこむ権利が与えられるという書き方をしたが、正確に言うと、誰か認定する人が居て権利を与えるという訳ではない。ターゲット値より小さなHash値を与えるnonceが書かれているブロックが広報されると、書き込まれているnonce値を使ってブロックヘッダのHash値を計算するのは簡単であるから、他の採掘者は、本当にProof of workが正しく実行されたかどうかは簡単に検証できる。そして、ブロックの内容を検査して、正当であると認めると自分のブロックチェインに追加するというプログラムになっているので、結果しとてブロックチェインへの繋ぎこみが行われることになるわけである。

採掘の報酬

ターゲット値より小さいHashを与えるnonceを見つけるProof of Workを行って、新たなブロックをブロックチェインに繋ぎこむと、採掘報酬が得られる。ビットコインが創設されて、最初の21万ブロックまでの採掘に対しては、1ブロックあたり50ビットコインが与えられた。そして、その次の21万ブロックの採掘に対しては、報酬は半分の25ビットコインとなる。現在までに採掘されたブロックは約32万なので、現在は、25ビットコインという報酬となっている。

採掘で儲けようという人やグループは多数あり、広報されたトランザクションをチェックして正当性を確かめ、新たなブロックを作ってHashの計算を繰り返してチェインに繋ぎこむことを競っている。先に誰かがブロックの追加に成功してしまうと、それまでの努力は水の泡で、次のブロックの追加のための計算に取り組む必要がある。つまり、多くの報酬を得るためには、計算速度が速く、他のグループより早く答えを見つけることが重要である。

まったく同じ問題を解いている場合は、強力なハッシュ計算能力を持つ採掘者が必ず勝つのであるが、ブロックの最初のトランザクションは、採掘者に報酬を支払うcoinbase transactionという特別なトランザクションで、採掘者ごとに支払先アドレスが違うので、それ以外の部分が同じでもMerkle RootのHash値は採掘者ごとに変わっており、採掘までに必要なHash回数はばらついている。このため、強力なハッシュ計算能力を持つ採掘者が常に先に答えを見つけるとは限らず、概ね、ハッシュ計算能力に比例した発掘回数になる。

42万ブロックが採掘されると、次の21万ブロックの採掘の報酬は12.5ビットコインと、21万ブロックの採掘ごとに報酬は半減して行く。ビットコインのシステムで最少の単位は、1ビットコインの1億分の1で、これをビットコインシステムの創始者の名前を取って1 satoshiと呼ぶ。現在、1ビットコインが5万円程度であるから、1satoshiは0.0005円程度になる。

採掘報酬が21万ブロックごとに半減していくと、ブロック数が6,929,999になると、報酬が1 satoshiを下回ってしまうことになる。トランザクションの支払額はsatoshi単位で記述することになっているので、1 satoshi未満の支払い額は記述できず、結果として、採掘報酬はゼロになってしまう。これがビットコインの総発行量を決めていて、それは2100万ビットコインとなる。

報酬額はこのように減少していくのであるが、発掘のスピードは10分間に1ブロックとなるように調整されるので、6,929,999ブロックの発掘に要する期間はおおよそ132年という計算になる。つまり、最後のブロックの発掘は2140年頃となり、まだまだ、先である。