ビットコインなどの仮想通貨の記事などを読んでいると、“Difficulty(ディフィカルティ)” という言葉が出てくると思います。
初心者マイナーとして何となくイメージはできていましたが、実際にどういうものなのかは漠然と理解していなかったので、今回は色々と調べて自分なりに理解したことを分かりやすく説明してみたいと思います。PoW(Proof of Work)を採用している仮想通貨のマイニングを経験したことがある人なら、理解はしていなくても一度は耳にしたことがある言葉ですよね。
日本語では「採掘難易度」とも呼ばれ、マイニングプールでは “Difficulty” の他に “diff.” なんて省略されて表示していたりします。
あらかじめお断りしておくと、理解・説明しきれないので採掘難易度の数学的な公式には触れません。マイニングツールやアルゴリズムを開発するわけでもなく細かい計算式などは知っても仕方ないので、ここでは「これを見て何が分かるか」にポイントに絞って学んでいきたいと思います。
Difficulty(ディフィカルティ)とは
まずはDifficultyの基本的な説明です。これはBitcoin Wiki(英語)というサイトが分かりやすかったので、このサイトの冒頭にあった説明文を意訳してみます。
Difficultyとは、ターゲット(目標値)を下回るハッシュ値を発見する難易度の指標のことです。
ビットコインネットワークはネットワーク全体のディフィカルティがあり、有効なブロックにするためにはターゲットを下回るハッシュ値を見つける必要があります。マイニングプールも、そのマイニングプール特有の難易度を設定しています。
要するに、ターゲットよりも低いハッシュ値を探す作業がマイニングで、そのターゲットを見つける難しさが Difficulty(採掘難易度)ということです。
ビットコインの場合、ブロック発見間隔が10分になるように、2016ブロックごとに難易度(diff)が自動調整されます。発見間隔が既定の10分より短ければdiffが上がり、10分より長ければdiffが下がるという調整が入るわけですね。
あと、Bitcoin wikiの説明を見て初めて知ったのですが、マイニングプールも独自の難易度を設定しているようです。
マイニングプールにおけるマイニング報酬の分配は、「そのマイナーがプールに還元したディフィカルティの総和」だと聞いたことはありましたが、そもそも一定のディフィカルティを満たしたシェアのみを「有効なシェア」とみなしているということでしょう(もちろん、プールによって扱いが異なることもあると思われます)。
次は「Difficultyが変わる」ことの意味を紐解いてみたいと思いますが、その前に「ターゲット」と「ハッシュ値」について、少し触れておきたいと思います。
ターゲットとなるハッシュ値について
まずは実際のビットコインのブロック情報を見てみましょう。
これはブロック番号 #522956 で、ハッシュ値は以下になっています。
ハッシュ値は64文字で、小さい順に 0 ~ z の値(英数字/alphanumeric)で構成されています。この組み合わせの値が、「ターゲットよりも大きいか小さいか」を比べているようです。
現在の採掘難易度は 4,143,878,474,754.19(4兆1443億) で、今回のハッシュ値は先頭から0が18個あるようですね。
そのときのターゲットが何だったか調べる方法を知りませんが、このブロック(難易度)ではマイナーが見つけた上記のハッシュ値がターゲットよりも小さい値だったので、有効なブロックと認められたということです。
次のブロック(#522957)も見てみます。
000000000000000000294519ea020e14417bf7e2f79a56b871eb30e3775b98ee
当然、同じ難易度なので、その前のブロックと同じゼロ18個から始まる値です。
少し昔を振り返ってみると、2014年5月10日のブロック(#300000)は採掘難易度も 8,000,872,135.97(80億)という時代で、現在の1/500の難易度だったようですね。
ハッシュ値もゼロ16個から始まるもので、今より0が2つ少ないことが分かります。
ということは、難易度が500倍になっても、ターゲットのハッシュ値としてはゼロ2つ増やすだけで良いという計算になります。難易度の最大値は「2の224乗」という計算量が必要な数字のようで、よく言われる「難易度については心配する必要がない(最大になるようなときは来ない)」という話も、実際にデータを目の当たりにすると説得力がありますね。
Difficultyの変化とは
次は私がずっと不思議に思っていたことなのですが、「Difficultyが 1 上昇すると何が変わるのか?」という素朴な疑問に対する回答です。その答えを探るために、まずはマイニングでやっていることを単純化してみます。
例えば、ターゲットとなるハッシュが「123456」だとすると、マイナーは「123455」以下のハッシュを探すことになります。このターゲットより小さければ、どういう組み合わせでもいいわけです。
これが、「地球上の電気代の無駄」と批判されるマイニングの実態で、この場合に有効なハッシュは「000000 ~ 123455」までの 3億6279万7056通り存在します(母数は000000~zzzzzzで36の6乗です)。
念のため、アルファベットを含めて桁数を減らした別の例を挙げると、ターゲットが「0sk」の場合、ブロックチェーンに組み込むために探す有効なハッシュは「000 ~ 0sj」ということになります(末尾がkよりも小さいjになります)。
上記を前提にDifficultyの変化を説明すると、「採掘難易度が1上がると、ターゲットのハッシュがより小さな値になる」ということになります。
上記は5年前の2018年5月当時のビットコインの難易度で、4兆を超える途方もなく大きな数字に見えますが、64桁のハッシュのパターン数からしたら大したことないと言えそうです(まだまだまだ余裕)。
それでは、このDifficultyの変化は、誰にどのような影響をもたらすのでしょうか。
Difficultyの変化による影響
結論から言うと、採掘難易度が上がっても、マイナーもホルダーも何も影響を受けません。逆もまた然りです。
もちろん、ブロック(有効なハッシュ)を発見しづらくなるので、diff調整の目的である「ブロック発見間隔」が目標値に近づきますが、diffの変化による直接的な影響は何もありません。
難易度が上がったとしても、参加者数(グローバル・ハッシュレート)が変わらなければ、「自分がブロックを発見できる確率は変わらない」ということです。マイナーに影響があるのは競合が増える(参加者が増えたり、マイニングツールの性能が向上する)ことによる合計ハッシュレートの増加です。
マイナーにとってのDifficulty
Difficultyによって直接的な影響を受けることはないにしても、私たちはDifficultyの何を見てどういう解釈すれば良いのでしょうか。
私たちが活用できるだろうポイントは一つで、「Difficultyの増加(減少)でマイナーの数やハッシュレートが増えている(減っている)ことを知ることができる」ということです。言い換えると、Difficultyは「その通貨の人気・収益性のバロメーター」と言えて、この増減で通貨に対するトレンドを読み解くことができそうです。
ハッシュレートを見ても同じことは言えますが、ハッシュレートのスナップショットはブレがあるので、下図のような最大・平均・最小を見ないと見誤ります。
このチャートは今は亡き国産の匿名通貨KOTO(コト)のハッシュレートですが、作者失踪というファンダメンタルの不安から、1か月半でハッシュレートが半減するという状態になりました。暗号資産業界においてマイナーは渡り鳥のようなものなので、より効率の良い通貨を見つけたらすぐにどこかへ行ってしまいます。
反対に、順調にDifficultyが上がっているような通貨は人気・収益性が高いということで、ソロマイニングで一発逆転を狙うような弱小マイナーには旨みが少ない通貨と言えそうです。
かなり話を単純化してみましたが、Difficultyについて少しでも理解の助けになれたでしょうか。この記事が Difficulty の理解する一助になれば幸いです。