マイニングとは?わかりやすく仕組みを解説!
マイニングとは、仮想通貨の「取引データを承認する作業」のことを言います。
マイニングは仮想通貨のみの話ではなくて、ブロックチェーンにも関わる処理です。
そのため、マイニングを理解することは、ブロックチェーンを深く理解するうえで欠かせません。
本記事では、マイニングのメインの処理である「ナンスの計算」について詳しく見ていきます。
それでは解説に移ります。
マイニングの仕組み
マイニングとは、仮想通貨の「取引データを承認する作業」のことを言いますが、その中でも大部分を占めているのが、
制約を満たすハッシュ値を生成する「ナンス」を見つけだす処理
です。これが一般的にマイニングという言葉でイメージする処理になります。
このマイニングの処理の仕組みを深く理解するためには、以下の3要素を知る必要があります。
- ブロックの情報を使ってハッシュ値が計算される
- ブロックのハッシュ値にはクリアしないといけない特殊な制約がある
- ブロックのハッシュ値を調整する「ナンス」という値がある
これらが分かれば、マイニングがどのようなことを行っていて、なぜ膨大な処理を必要とするのかがわかるようになると思います。
まずは、その3要素を順番に見ていきましょう。
ブロックから生成されるハッシュ値
ブロックチェーンの一つ一つのブロックには、それぞれ「ハッシュ値」という特殊な値が存在します。
存在するというよりは、計算されると言った方が正しいかもしれません。
そのハッシュ値は、以下の図のように、ブロックの情報を使って生成されます。
↓ ブロックのハッシュ値の生成イメージはこんな感じ ↓
ブロックのハッシュ値は「取引データ」「前のブロックのハッシュ値」「ナンス」などのすべての情報を使って生成されます。
上のサイトに書かれているのは、このようなことです。
- ブロック:ブロックの通し番号
- ノンス:ハッシュ値を調整する値(下で紹介)
- データ:取引データそのもの
- 前:前のブロックのハッシュ値
- ハッシュ:このブロックのハッシュ値
- 掘る:マイニング
このハッシュ値というのが、マイニングの処理に大きくかかわっています。
ブロックのハッシュ値にはある制約がある
ブロックの情報を使ってハッシュ値が計算されることがわかりました。
ここで、ブロックのハッシュ値にはある決められた制約があるということを解説します。
その制約とは、
「先頭からあらかじめ決められた桁数『0』が続いていないといけない」
という制約です。
例として、「先頭の8桁を0にしなくてはいけない」という制約を考えてみましょう。
まずは、制約をクリアしているハッシュ値の例です。
- 000000002cd49a31c4fe80145ac36815e85205aaad77158c594ac3a023b75a3d
- 000000005e6c50adbf35862e217df1be3e5e9d0c08519fd1408923db4d86378b
次は、制約をクリアしていないハッシュ値の例です。
- 7f0b761bc7ca87f26e99d577bfb33654cbbb97315542ec9a17317203b70c5af9
- 000c00008e67e8eb529744cb536e41f99846d2badd8b386f7b9f818389c58ba7
このように、ブロックから生成されるハッシュ値は特殊な制約をクリアしていないといけません。
逆に、その制約を満たしていないブロックは改ざんされていることを表します。
ハッシュ値を調整する値「ナンス」
上の制約を満たすようなハッシュ値を生成するブロックは偶然現れるようなものではありません。
なので、意図的に作り出さなくてはいけません。
そこで、ブロックのハッシュ値を調整するために、ブロックの中に「ナンス(Nonce)」という値が用意されています。
Number used once(一度だけ使われる値)という意味を持っていて、読み方は「ナンス」または「ノンス」です。
「なぜナンスを使うとブロックのハッシュ値を変えられるのか」というと、
ブロックのハッシュ値がナンスの値も含めて計算されるからです。
もう一度下のイメージを思い出してみましょう。
このようにハッシュ値はナンスの値も含めて計算されるので、ナンスの値を変えることでハッシュ値を調整することができるのです。
マイニング≒ナンスを見つける処理
マイニングを理解するために、以下の三つの要素を解説しました。
- ブロックの情報を使ってハッシュ値が計算される
- ブロックのハッシュ値にはクリアしないといけない特殊な制約がある
- ブロックのハッシュ値を調整する「ナンス」という値がある
ここまでくれば、マイニングの処理がどういうものなのかも簡単に説明することができます。
マイニングの主な処理は、
「ブロックのハッシュ値が制約を満たすようなナンスを見つける」という処理です。
例えば、ハッシュ値の制約が「先頭8桁が0である」だった場合、ブロックのナンスの値を変えて、
7f0b761bc7ca87f26e99d577bfb33654cbbb97315542ec9a17317203b70c5af9
↓ マイニング ↓
000000002cd49a31c4fe80145ac36815e85205aaad77158c594ac3a023b75a3d
こういった制約を満たすハッシュ値にしろということです。
では、どのように適切なナンスを見つけるのかということを見ていきましょう。
まず、ブロックを生成したときに、偶然にも制約を満たしているなんてことはほぼあり得ません。
先ほどの例では、「先頭から0が8つ続くハッシュ値」でしたが、実際のところ、0が2つでもでたらラッキーレベルです。
下のサイトでハッシュ値を生成することができるので、テキトーに文字列を打ってハッシュ値を出してみてください。
まあ16進数の場合、
狙った一桁が0になる確率は \(\frac{1}{16} \) なわけですから、
狙った二桁が0になる確率は \(\frac{1}{16} \times \frac{1}{16} = \frac{1}{256}\) なわけです。
そんなわけで、「先頭から0が8つ続くハッシュ値」を生成するのは人間には不可能に近いレベルです。
これが、有名な仮想通貨「ビットコイン」の場合「先頭から16桁」です。
それなら、なにかハッシュ値に「規則性」があるんだろうと思うかもしれません。
しかし、そう言った規則性、法則はありません。
むしろハッシュ値は、逆算されないような仕組みが特徴で、そういった法則を見つけられないように作られているのです。
ではどのようにして、制約をクリアしたハッシュ値を生成するナンスを見つけるのでしょうか。
その答えはとても単純な方法「総当たり」です。
そうです、「力技」です。
例えば以下のように「総当たりの処理」を行います。
ナンス | ブロック全体のハッシュ値 |
---|---|
1(これではない) | a43ec66ba0fg... |
2(これではない) | 0e93abba5a61... |
3(これではない) | 10aef996bc3a... |
...(これではない) | ... |
10302947(これではない) | 9a2df38bc719... |
10302947(やっと見つけた...!) | 000000007269... |
このように、ナンスの値を試していない値に設定し、そのハッシュ値を実際に計算しながら確認を行っていきます。
そこで、特定の制約を満たすハッシュ値が生成するナンスを見つけられればクリアです。
まさにこの処理こそが「マイニング」の処理になります。
マイナーと呼ばれる人たちは、強大なコンピューターパワーを使って、この処理をひたすら行って、いち早くナンスを見つけようとしているのです。
マイニングとマイナー
マイナーとは
マイナーとは、マイニングを行う人や組織のことを言います。
マイナーがマイニングを行うのは、マイニングを成功した人にマイニング報酬が支払われるからです。
しかし、マイニングの処理は、基本的に膨大な計算量を要することが多いです。
そのため、個人でマイニングを行うことは厳しく、組織がマイニング専用のコンピュータを何千台も集めた工場のようなものを作ってマイニングを行うのが一般的です。
クラウドマイニングとは
個人が、少し異なる方法でマイニング報酬を得るサービスがあります。
それが「クラウドマイニング」です。
クラウドマイニングは、個人がマイニングを行う企業に出資して、マイニング報酬を分け与えてもらうという仕組みで成り立っています。
つまり、高性能なコンピュータを用意する必要はありません。
そして、マイニングを行うことも必要ありません。
専門知識も必要ありません。
すべてをその企業に任せることになります。
ここまで聞くと、最高だと思うかもしれませんが、クラウドマイニングにも落とし穴があります。
例えば、投資したクラウドマイニングの企業が倒産してしまう可能性があるということ。
ほかにも、マイニングする仮想通貨の価値そのものが落ちてしまうということなどが挙げられます。
要は、「投資」ですので、クラウドマイニングに行う際は、その企業の信頼度や仮想通貨の価値などをよく吟味する必要があるということですね。
最後に
今回は、今話題の技術「ブロックチェーン」にも大きくかかわる「マイニング」について解説しました。
もっと理解を深めたい方に向けて、ブロックチェーンの解説記事を書いたので、ぜひご覧ください。
以上「マイニングとは?わかりやすく仕組みを解説!」でした!