悪意のある採掘者による分岐

悪意のある採掘者が、自分の利益になるようにトランザクションの内容を改変し、そのブロックの採掘に成功して、偽りのブロックを広報することは有り得ないことではない。しかし、広報を受け取った他の採掘者は新しいブロックの正当性をチェックするので、原資となるトランザクションが無いとか、支払額に対して原資が不足しているなどの簡単に分かるごまかしは通用しない。このようなケースでは、広報された偽りのブロックは無視されてしまい、他のノードのブロックチェインには繋ぎこまれない。

偽りが成功する可能性があるのは、2重支出である。受取トランザクションにはそれを使ってしまったかどうかの情報は書き込まれないので、別のブロックとなる2つのトランザクションで同じトランザクションを原資として記述しても、容易にはチェックできない。このような偽りを含んだブロックをProof of Workを行ってチェインに繋ぎこむということを繰り返すことができると既成事実になってしまう恐れがある。

しかし、正直な採掘者が改変のない正しいトランザクションを含んだブロックを採掘してブロックチェインに繋ぎこむので、改変したトランザクションをブロックチェインに残しておくためには、悪意のある採掘者は、そのブロックチェインを伸ばし続ける必要がある。それも、正直な採掘者全員がブロックチェインを伸ばすよりも速く、チェインを伸ばさないと孤児になって追加したブロックが取り消されてしまう。

つまり、正直な採掘者全員の集団と、1人の悪意のある採掘者の採掘速度の競争となり、悪意のある採掘者が過半数の採掘能力をもっていない限りは、このレースに勝って改変したトランザクションを正式なものと認めさせ続けるということはできない。

SHA-256とASICによる採掘

SHA-256は米国のNISTが定めた標準のハッシュ関数である。そのやり方は、256bitのストリングを32bitごとのA~Hに分け、図8のような演算を行って新しいA~Hを計算する。次に新しいA~Hを入力として演算を行うという処理を合計で64回繰り返す。なお、Kiは素数から導かれた定数で、64個の値があり、毎回、異なる値を順に使う。Wiは初期ストリングから一定の規則で生成される値であるが、詳細は省略する。このWiも毎回、異なる値となる。

図8 SHA-256の圧縮関数。これは1回分で、Ki、Wiを変えて64回繰り返す

SHA-256の計算は、図8に見られるように、入力とそのシフトの簡単な論理の組み合わせである。当初はCPUで計算を行っていたが、GPUを使って並列に計算するGPUマイニングに移行し、続いて、FPGAでこの計算を行うFPGAマイニングが主流になった。

しかし、この論理を実行するASICを作れば、消費電力が少なく、高速で演算ができることから、現在では、専用のASICを使うASICマイニングが主流となっている。

ASIC自体もどんどん高性能化が行われており、2014年8月のHot Chips 26で発表された「Goldstrike 1」というASICはSHA-256計算を、ループではなく64段のパイプラインで実現し、Wi計算のハードウェア化と合わせて1Hash/Cycleで実行する。そして、このパプラインを1チップに120本集積して、500GHash/sという性能を実現している。なお、BitcoinではHash計算は、SHA-256を2重に実行することになっており、Goldstrike 1は、SHA-256を1G回/sで実行している。

プールによる採掘

平均的に10の19乗回のHash計算をしないとブロックを採掘できないので、個人のパソコンなどで採掘を行っても非常に長い時間がかかり、その前に、誰か他の採掘者が見つけてしまい、途中までの計算が無駄になるということの繰り返しで、まず、採掘報酬は得られない。

2014年3月12日のCoinDeskには北米最大と言われる1ペタハッシュ/秒のマイニング施設が報道されているが、2000平方フィート(約186平方メートル)の倉庫に棚をならべ、Bitfuryの開発したマイニング専用のASICを使ったハードウェアを並べている。しかし、ペタハッシュといっても、毎秒10の15乗回なので、ブロックを採掘するのに1万秒(約3時間)掛かる計算である。しかし、これは1人だけが採掘している場合の計算で、競争環境では、他者が先に採掘に成功してしまうと無駄になる計算があるので、実際には、もっと長い時間が掛かる。

このため、採掘競争に勝とうとすれば、より大きなハッシュ能力が必要になる。このため、単独ではなく、多くの人が集まってハッシュ能力のプールを作って採掘を行うのが一般的となっている。図9は執筆時期の直前の4日間のデータで、誰が発掘したかを示すものである。Discus Fish(中国)とGHash.IO(オランダ)が2大プールで、この2つで45%を超えるブロックの採掘を行っている。なお、発掘されたブロックを見てもcoinbase transactionの支払先のハッシュされたアドレスしか分からないので、20%のブロックの発掘者がunknownとなっている。

図9 直前の4日間の発掘者の比率(https://blockchain.info/ja/pools)

プールでは参加者全員が重複した仕事をしてしまわないように、プールのオペレータからcoinbase transactionの一部の値をこの範囲で分担して発掘を行えというように仕事が割り振られる。そして、参加者は、発掘のターゲット値よりは難易度が低いプールが設定したターゲット値を下回るハッシュ値が見つかると、それをプールのオペレータに報告する。報告の回数は、おおよそ、実行したハッシュの回数に比例するので、プール参加者の誰かが発掘に成功して報酬が得られると、その報酬を、報告の回数に比例して参加者に配分する。