DMMエンジニアによるブロックチェーン講座

マイニングプールとは

基本の仕組みとブロックチェーンとの関わりについて解説

 現在、暗号通貨の報酬(コイン)を得る手段として「マイニングプール」という仕組みが利用されています。マイニングプールの仕組みは、ディフィカルティを維持しつつ、より多くの人にコインを配布する仕組みであり、コインの価値を高める一助となっています。

 本稿では、Proof of Work(PoW)、マイニングプール、プロトコルの仕組みについてそれぞれ解説します。

はじめに

 昨今、暗号通貨のマイニングの成功報酬としてコインが支払われることが広く知られたことによって、計算機上で特定のマイニングソフトウェアを動かしておくだけで、報酬を獲得することができるということも知られるようになりました。

 その報酬のコインを得る手段として「マイニングプール」という仕組みが広く利用されているということをご存知でしょうか。今では採掘難易度の高騰により暗号通貨をマイニングすることで発生する報酬のほとんどは、マイニングプールを通じて得られていると言っても過言ではありません。

 この連載では、DMMクリプトマイニング事業部のエンジニアでもある筆者が、マイニングプールの仕組みや問題点、運用方法などについて余すことなく解説します。

 本稿では、暗号通貨やブロックチェーン、マイニングなどに興味があり、ある程度概要を理解されている方を対象にマイニングプールの仕組みと、ブロックチェーンとの関わりについて説明したいと思います。

Proof of Work(PoW)の仕組みについて

 マイニングプールについて説明する前に、まずマイニングとその仕組みについて説明します。ブロックチェーン上で暗号通貨を受け渡しした情報は、ブロックに記録されブロックチェーンに組み込まれることで、保存されたデータとなります。ブロックチェーンにブロックをつなげるには、ブロックに記録された情報をブロックチェーンに参加するノードの間でブロックを承認しなければなりません。承認のやり方はいくつかありますが、ここでは Bitcoin(BTC)、 Litecoin(LTC)、Ethereum(ETH)など主要なコインのほとんどで採用されているProof of Work(PoW)について説明したいと思います。

 承認の形式はPoWのほかに、Proof of Stake(PoS)という保持しているコインの量などをもとに参加者ごとの重要度を算出し、合意をした参加者の重要度の合計の値がしきい値を超えたことをもって合意とする承認形式もあります。主要な暗号通貨ではEthereumに、PoWとPoSの混合されたシステム(Casper)として採用される予定です。

 PoWとは、ブロックチェーンに参加する計算機に一定量の仕事を行わせ、その仕事量をもって合意とする承認形式です。ここでいう「仕事」とは、承認する対象のブロックの情報をもとにして、特定の条件を満たすハッシュ(ノンスと呼ばれている)を計算し、条件を満たすまでハッシュを生成し続けることです。そして、最初にその条件を満たしたハッシュを生成した時点でそのブロックは承認され、そのハッシュを生成した計算機を持つ参加者は、マイニング報酬として新たに発行されるコインを得ることができます。この時得られるコインは、ブロックリワードと呼ばれています。

 現在、Bitcoinでは報酬として12.5BTCを得ることができます(実際には、ブロックが承認された時にその参加者のアドレスに報酬が送られます)。

 これらの承認作業は、鉱山から金などを採掘するのになぞらえて「マイニング」と呼ばれており、マイニングを行う計算機は、金を採掘する掘削機になぞらえて「リグ」と呼ばれています。また、一定時間内にハッシュを生成できる量(速度)を「ハッシュパワー」といいます。

ブロックチェーンの健全な運用方法

 ブロックが承認される条件は、基本的に承認対象のブロックの情報により計算されますが、その時点の採掘難易度(ディフィカルティ)によっても変化します。ディフィカルティが高いほど条件に一致するハッシュを生成することが難しくなり、ブロックの承認する効率を下げます。

 そのような性質から、ディフィカルティはブロックチェーンのネットワーク全体で、ブロックの承認するペースを一定に保つために使用されます。ディフィカルティが高い場合は、条件を満たすハッシュを生成できる確率が低くなるため、承認を行うためには多くのハッシュを生成しなければならず、マイニングによって報酬を得る効率は下がることになります。そのためマイニングを行う参加者が減り、それに伴いハッシュパワーも小さくなるため承認に時間を要するようになります。この場合、承認の効率を上げるためにディフィカルティは低くなるように調整されます。

 逆にディフィカルティが低い場合は、マイニングの効率は上がり、同じ仕事量でより多くの報酬を得ることができるようになるため、マイニングを行う参加者は増えます。この場合、先ほどとは逆にディフィカルティは高くなるよう調整されます。

 つまり、参加者が多く、ハッシュパワーが大きい場合はディフィカルティは低くなるよう調整され、参加者が少なく、ハッシュパワーが小さい場合は高く調整されます。このディフィカルティの変化によってマイニングを行う参加者と、それに伴うハッシュパワーを増減させ、承認するペースを一定に保っているのです。

 また、難易度が低い状態が続くことは、マイニングを行う参加者にとっては効率的に報酬のコインを得ることができ有利ですが、同時にブロックを承認するために必要なハッシュパワーが小さくて済むことも意味し、比較的小さいパワーで恣意的にブロックチェーンのデータを書き換える(51%攻撃、後述)などのブロックチェーンに対する悪意ある破壊的な攻撃が簡単に行えるようになってしまいます。ブロックチェーンを健全な状態で運用するためには、ある程度の規模のハッシュパワーが存在し、かつ、それが適切に分散されている(一個人や団体によって、ハッシュパワーを占領できない)状態を維持することが必要なのです。

マイニングプールの仕組みについて

 前述の通り、PoWの仕組みにおいては、報酬のコインを入手するにはマイニングが必要となります。マイニングには、ハッシュを計算可能な計算機を数多く使うことが必要ですが、ディフィカルティが非常に高くなっている多くの主要な暗号通貨では、計算量が膨大なため、一個人が持つ計算機を使ってマイニングを行い報酬を得ることは、ほぼ不可能です。

 現在では普通の計算機(パソコン)に替わり、「ASIC」というハッシュを計算するためだけに設計された計算機が主に使用されていますが、それでもコインを報酬として得られる確率は非常に小さく至難の業です。そこで、多くの人の計算機のハッシュパワーを集め、協力してマイニングを行うために作られたサーバーがマイニングプールです。

 マイニングプールの仕組みについて説明します。マイニングプールはサーバーですが、普通のリグと同じくブロックチェーンに参加し、ブロックの承認を行っています。マイニングプールは承認が必要なブロックを見つけると、プールに接続している全ての参加者に、見つけたブロックに対してハッシュを作成するよう要請します。マイニングプールではこの仕事の要請を「ジョブ」と呼んでいます。

 プールの参加者は、この一つのジョブ、つまり、通常のマイニングと同じようにブロックに対してハッシュを作成し、マイニングプールサーバーを通じてハッシュを送信します。通常のマイニングと異なるのは、「マイニングプールサーバーを通じて」ハッシュを送信することです。プールの参加者のうち、ひとりでも条件を満たすハッシュを生成することができた場合、ブロックの承認に成功したことで受け取る報酬となるコインは、一旦マイニングプールのアドレスに送られ、プールに預けられます。

マイニングプールもブロックチェーンネットワークの一部

 そして、そこから各プール参加者の仕事量に応じて分配されます(マイニングプールの運営方針や報酬計算の方法によりますが、通常、報酬として発行されたコインはハッシュを引き当てた人の取り分とはなりません)。

 マイニングプールが得た報酬は、一定の計算式に基づいて分配されるのですが、現在マイニングプールで採用されている報酬の主な計算方法は「PPLNS」と「PPS」の2種類があります。

 計算方法の詳細については、次回以降で説明したいと思います。このような仕組みを通じてマイニングを行うことによって、ハッシュパワーの小さい個人でも、仕事量に応じた報酬を安定して継続的に得ることが可能となっています。

プロトコル「Stratum protocol」について

 マイニングプールをサービスとして開始したのは、「SlushPool」というマイニングプールが初めてになります。SlushPoolはマイニングプールとプール参加者の間のやり取りの方法やルールを決めるため、「Stratum protocol」というプロトコルを策定しました。現在では、ほぼ全てのマイニングプールはこのプロトコルに従って実装され、動作しています。

 また、ほとんどの全てのマイニング用ソフトウェアもこのプロトコルに対応して実装されています。Stratum protocolでは一般的によく用いられているTCP通信を使用し、JSON-RPCでエンコードされたメッセージ形式を採用しています。JSON-RPCは通信量が大きくなるなどのデメリットがあるものの、JSONが様々なプログラミング言語やプラットフォームでサポートされているなど、比較的簡単に実装が可能であるというメリットが優先されています。

 Stratum protocolでは、プールに対する接続はロングポーリングで維持されます。ロングポーリングは、クライアントからのリクエストに対して、サーバーはレスポンスを保留して、コネクションを維持する仕組みです。Stratum protocolがロングポーリングを採用しているのは、ショートポーリング(もしくは都度のハッシュの送信)では、マイニングプールサーバーに対する通信量が膨大になってしまい、すぐにサーバーが限界に達してしまうためです。

 また、頻繁なポーリングはマイニングの性質上、ネットワークの負荷を上げるばかりで大きな意味をもちません。なぜなら、先述のPoWの仕組みの上ではブロックの承認は採掘難易度によって数分に1回になるようコントロールされており、ジョブの対象のブロックが頻繁に更新されることはないからです。このようにStratum protocolは、マイニングの仕組みや性質に則って最適化されるように設計されたプロトコルなのです。

おわりに

 このように、マイニングプールの仕組みはディフィカルティを維持しつつ、より多くの人にコインを配布する仕組みであり、コインの価値を高める一助となっています。

 一方で、マイニングプールの運営者にハッシュパワーが集中することにより、ブロックチェーンに対する攻撃の危険性を高める仕組みでもあります。次回は、実際にマイニングプールに接続するまでの手順を確認しながら、マイニングプールの内部構造や報酬計算の詳細な仕組みなどを説明したいと思います。

角本 幸生

合同会社DMM.comクリプトマイニング事業部エンジニア。暗号通貨を利用したプロダクトの開発に従事。ソフトハウス、コンサルティングファームを経て現職。関心のあるプログラミング言語はScala/Rust/Crystal。