マイニングのDifficulty(採掘難易度)とは

ディフィカルティ(採掘難易度)とは

 

仮想通貨を触っていて、“Difficulty(ディフィカルティ)” という言葉を聞いたことありますか?

 

PoW(Proof of Work)を採用している仮想通貨のマイニングを経験したことがある人なら、一度は耳にしたことがある言葉ではないかと思います。

日本語では「採掘難易度」とも呼ばれ、マイニングプールでは “Difficulty” の他に “diff.” なんて省略されて表示していたりしますね。

Currecnt Difficulty

 

初心者マイナーとして何となくイメージはできていましたが、実際にどういうものなのかは漠然と理解していなかったので、今回は色々と調べて自分なりに理解したことを書いてみたいと思います。

あらかじめお断りしておくと、理解・説明しきれないので採掘難易度の数学的な公式には触れません。

細かい計算式などを知っても仕方ないので、ポイントは「これを見て何が分かるか」を知ることだと思います。

Difficulty(ディフィカルティ)とは

ブロックチェーンの根幹技術なので、ほとんどの通貨で同じだと思いますが、今回は全てBitcoin(BTC)を前提にしています。

 

まずはDifficultyの基本的な説明です。

Bitcoin Wiki というサイトがあったので、こちらの冒頭にあった説明文を意訳してみます。

Difficultyとは、ターゲット(目標値)を下回るハッシュ値を発見する難易度の指標のことです。

ビットコインネットワークはネットワーク全体のディフィカルティがあり、有効なブロックにするためにはターゲットを下回るハッシュ値を見つける必要があります。マイニングプールも、マイナーから送られるシェアが下回る必要のあるマイニングプール特有の難易度を設定しています。

 

要するに、ターゲットよりも低いハッシュ値を探す作業がマイニングで、そのターゲットを見つける難しさが Difficulty(採掘難易度)ということです。

 

ビットコインの場合、ブロック発見間隔が10分になるように、2016ブロックごとに難易度(diff)が自動調整されます。

発見間隔が既定の10分より短ければdiffが上がり、10分より長ければdiffが下がるという調整が入るわけですね。

 

あと、Bitcoin wikiの説明を見て初めて知ったのですが、マイニングプールも独自の難易度を設定しているようです。

マイニングプールにおけるマイニング報酬の分配は、「プールに還元したディフィカルティの総和」だと聞いたことはありましたが、そもそも一定のディフィカルティを満たしたシェアのみを「有効なシェア」とみなしているということでしょう(もちろん、プールによって扱いが異なることもあるでしょう)。

 

次はDifficultyが変わることによる意味を紐解いてみたいと思いますが、その前に「ターゲット」と「ハッシュ値」について、少し触れておきたいと思います。

ターゲットとなるハッシュ値について

まずは実際のビットコインのブロック情報を見てみます。

ブロックチェーンのハッシュ

 

これはブロック番号 #522956 で、ハッシュ値は以下になっています。

000000000000000000318c73a2035d991906daf28ae5192a75212f00b4cfa1ee

 

ハッシュ値は64文字で、小さい順に 0 ~ z の値(英数字/alphanumeric)で構成されています。

この組み合わせの値が、「ターゲットよりも大きいか小さいか」を比べているようです。

現在の採掘難易度は 4,143,878,474,754.19(4兆1443億) で、今回のハッシュ値は先頭から0が18個あるようですね。

そのときのターゲットが何だったか調べる方法を知りませんが、このブロック(難易度)では上記のハッシュ値がターゲットよりも小さい値だったので、有効なブロックと認められたということです。

 

次のブロック(#522957)も見てみます。

000000000000000000294519ea020e14417bf7e2f79a56b871eb30e3775b98ee

当然、同じ難易度なので、その前のブロックと同じゼロ18個から始まる値です。

 

少し昔を振り返ってみると、約4年前の2014年5月10日のブロック(#300000)は採掘難易度も 8,000,872,135.97(80億)という時代で、現在の1/500の難易度だったようです。

採掘難易度の推移チャート

 

ハッシュ値もゼロ16個から始まるもので、今より0が2つ少ないことが分かります。

000000000000000082ccf8f1557c5d40b21edabb18d2d691cfbf87118bac7254

 

ということは、難易度が500倍になっても、ターゲットのハッシュ値としてはゼロ2つ増やすだけで良いという計算になりそうです。

難易度の最大値は「2の224乗」という計算量が必要な数字のようで、「難易度については心配する必要がない(最大になるようなときは来ない)」という話も、実際にデータを目の当たりにすると説得力がありますね。

Difficultyの変化とは

次は私がずっと不思議に思っていたことなのですが、「Difficultyが 1 上昇すると何が変わるのか?」と聞かれたら、何が起こるか答えられますか?

 

その答えを探るために、まずはマイニングでやっていることを単純化してみます。

 

例えば、ターゲットとなるハッシュが「123456」だとすると、マイナーは「123455」以下のハッシュを探すことになります。これより小さければ、どういう組み合わせでもいいわけです。

これが、「電気代の無駄」と批判されるマイニングの実態で、この場合に有効なハッシュは「000000 ~ 123455」までの 3億6279万7056通り存在します(母数は000000~zzzzzzで36の6乗です)。

ハッシュは0-9の数字と小文字アルファベット26文字の計36文字を使用するので、1桁で36通りの値を表現することができます。

 

念のため、アルファベットを含めて桁数を減らした別の例を挙げると、ターゲットが「0sk」の場合、ブロックチェーンに組み込むために探す有効なハッシュは「000 ~ 0sj」ということになります(末尾がkよりも小さいjになります)。

上記を前提にDifficultyの変化を説明すると、「採掘難易度が上がると、ターゲットのハッシュがより小さな値になる」ということになります。

ビットコインの採掘難易度

 

これは現在のビットコインの難易度で、4兆を超える途方もなく大きな数字に見えますが、64桁のハッシュのパターン数からしたら大したことないと言えそうです(まだまだまだ余裕)。

 

それでは、このDifficultyの変化は、誰にどのような影響をもたらすのでしょうか。

Difficultyの変化による影響

結論から言うと、採掘難易度が上がっても、マイナーもホルダーも何も影響を受けません。逆もまた然りです。

 

もちろん、ブロック(有効なハッシュ)を発見しづらくなるので、diff調整の目的である「ブロック発見間隔」が目標値に近づきますが、diffの変化による直接的な影響は何もありません。

難易度が上がったとしても、参加者数(グローバル・ハッシュレート)が変わらなければ「ブロック発見できる確率は変わらない」ということです。

マイナーにとってのDifficulty

Difficultyによって直接的な影響を受けることはないにしても、それではDifficultyは何をどのように見れて解釈すれば良いのでしょうか。

 

私たちが活用できるだろうポイントは一つで、「Difficultyの増加(減少)でマイナーの数やハッシュレートが増えている(減っている)ことを知ることができる」ということです。

言い換えると、Difficultyは「その通貨の人気・収益性のバロメーター」と言えて、この増減で通貨に対するトレンドを読み解くことができそうです。

 

ハッシュレートを見ても同じことは言えますが、ハッシュレートのスナップショットはブレがあるので、下図のような最大・平均・最小を見ないと見誤ります。

KOTOのハッシュレート推移

 

このチャートは匿名通貨KOTOのハッシュレートですが、作者失踪というファンダメンタルの不安から、1か月半でハッシュレートが半減するという状態になりました。マイナーは渡り鳥のようなものなので、より良いものを見つけたらすぐにどこかへ行ってしまいます。

反対に、順調にDifficultyが上がっているような通貨は人気・収益性が高いということで、ソロマイニングで一発逆転を狙うような弱小マイナーには旨みが少ない通貨と言えそうです。

 

込み入った話は私も理解できていないので、かなり話を単純化してみましたが、Difficultyについて少しでも理解の助けになれたでしょうか。

 

最後まで読んでいただき、ありがとうございました。

この記事が Difficulty の理解する一助になれば幸いです。




ディフィカルティ(採掘難易度)とは