イーサリアムのディフィカルティボム ハードフォークの今だからこそちゃんと解説

イーサリアムのConstatinopleのハードフォーク、無事に終わりましたね。

2018年10月に一度延期され、セキュリティ上の問題が発見された2019年1月にリスケ。
その1月も、再度問題が発見されて、2月末へ延期。
そして3度目…

EOSTRONに比べて動きが遅いと批判が集まっていたイーサリアム…
これでまた延期だったらちとまずいかな、と思ってましたので、ひとまずよかった。
安心、安心…

※EOSについては、こちらで解説しています。

EOS イーサリアム越えの高ポテンシャルが魅力【アルトコイン 次に何買う?(1)】

さて、イーサリアムのハードフォークが話題になると一緒に出てくる言葉に「ディフィカルティボム」があります。
直訳すると、「困難さの爆弾???」でしょうか…

ブロックのマイニングの難しさをわざと上げていき、マイニングに時間がかかるように仕向けるプログラムです。
また、ディフィカルティボムによってマイニングが難しくなり、チェーンが伸びなくなった状態を「アイスエイジ = 氷河期」と言ったりします。

今回のConstatinopleのハードフォークでも、関連記事でよく出てきました。
「ハードフォークが延期になると、ディフィカルティボムの影響が出て、ブロックの生成が遅くなる」
といった感じで…

なんで、わざわざこんな仕掛けを入れてるんでしょう?
自分で自分の首を絞めているような…

ハードフォークが話題になった今がちょうどいいタイミングですから、解説してみましょう。
もしかすると、イーサリアムの次のハードフォークまで、話題になることがないかもしれないので。

イーサリアムハードフォークのおさらい

イーサリアムは、単なる仮想通貨という位置づけを狙ったプロジェクトではありません。
スマートコントラクトと分散アプリケーションのプラットフォームとなることを目指しています。

イーサリアムの特徴の一つに、計画的なハードフォークによるバージョンアップがあります。
4つのバージョンが計画されており、現在はその3つ目のMetropolisへの移行が終了。

  • Frontier  2015年6月30日稼働
  • Homestead  2016年3月14日稼働
  • Metropolis
    2017年10月16日 第1弾 Bizantium実施
    2019年3月1日 第2弾 Constantinople実施
  • Serenity  未計画

Metropolisへの移行は2段階に分割され、2017年10月16日に1段階目のByzantiumを実行。
そして今回無事に終了したのが2段階目のConstantinopleです。

※BizantiumもConstantinopleも、現在のイスタンブール。ヨーロッパとアジアの交点に位置するローマ帝国時代からの大都市です。

※ ソフトウエアのバージョンに名前をつけるのって、なかなかいいですね。仕事で作るソフトウエアをv2.1とかって番号で呼んでるのに比べると、ずっと趣があります。

毎回のバージョンアップの仕様の詳細は、イーサリアムコミュニティ内の合議で決められ、ハードフォークによって行われます。

ディフィカルティボムって何?

ディフィカルティボムは、イーサリアムのプログラムの中に組み込まれている仕組み。
時間がたつにつれてブロックのマイニングが指数関数的に難しくなります。
「指数関数的に…」てことは、最初のころは気づかないぐらいの微々たる影響ですが、ほっとくとあっという間に困難さが大きくなり、だれもマイニングできないレベルになってしまう…

ディフィカルティボムは、2015年の9月にイーサリアムに導入されました。

その目的は、
コンセンサスアルゴリズムをProof of WorkからProof of Stakeに変更するハードフォーク時に、マイナーが古いPoWのチェーンに残ってしまうことを防ぎ、PoWからPoSへのスムーズな移行を可能にすること

古いPoWのチェーンではマイニングはどんどん難しくなっていき、マイニングから報酬を得ることができなくなる。
古いチェーンに残るインセンティブはないので、新しいPoSのチェーンにみんなで移るしかない状態にしてしまおう…
というもくろみです。

「ボム」という名称に反して、どこかでどか~んと爆発するようなものではありません。2015年にイーサリアムのプログラムに組み込まれたときから稼働し始め、ゆっくりと、しかし着実にマイニングの難易度を上げ続けるのです。

※ PoW、PoS等のコンセンサスアルゴリズムについては、以下で解説しています。

氾濫するProof of Xをここらでまとめて解説 コンセンサスアルゴリズム編(PoW, PoS, PoI, DPoS)

ディフィカルティボムの効果とBizantium

ディフィカルティボムの効果を見てみる

ディフィカルティボムの効果をみるため、イーサリアムのブロック生成時間の推移を見てみましょう。
下記のチャートは、etherscan.ioで確認することができます。

イーサリアムのブロック生成時間の推移

イーサリアムのブロック生成時間の推移  etherscan.io参照

ブロックの生成時間は、1ブロック当たりのマイニング時間と同じ。
イーサリアムのマイニングは、通常は平均15秒以下でコントロールされています。

ところが、2017年4月ぐらいから、ディフィカルティボムの効果が表れ、マイニングにかかる時間が増え始めます。
本来はこうなる前にPoSへの移行を実施する予定だったのですが、計画は遅れ、ディフィカルティボムの影響が徐々に強くなっていく。

そこで、Metroporisの1段目、Bizantiumのハードフォーク時に、ディフィカルティボムの進行を遅らせるためのプログラムの改変を行うことにしたのでした。

Bizantiumでのプログラムの改変内容

イーサリアムでのコードの改変は、EIP(= Ethereum Improvement Proposal)として提案され、イーサリアムのコミュニティ上で審議され、確定します。

これまで提案されたEIPは、GitHubで確認することができます。
この方面の技術屋さんじゃないと、内容を見てもあまり楽しくはないですが…

Bizantiumのハードフォークの場合、ディフィカルティボムに関しては、EIP-649で提案されています。
プログラムコードの具体的な修正点まで明記されており、曖昧さのない提案です。
これがイーサリアムのコミュニティのやり方なんですね。
丁寧で感心します。

EIP-649の内容
  • ディフィカルティボムの進行を、1年半程度遅らせる。
  • マイニング報酬の額を5ETHから3ETHに下げる。

PoSへの移行が、当初の予定から大きく後ろにずれてまだしばらくPoWが続くため、ETHの発行量を調整するために、マイニング報酬を合わせて下げることが提案されています。

Bizantiumハードフォークの結果

Bizantiumのハードフォークも当初の予定よりは遅れて実施されています。

上のイーサリアムのブロック生成時間を見ると、2017年4月からブロックの生成時間が急激に上がり始め、15秒以下だったブロック生成時間が、一時期は30秒となっている様子が分かります。

イーサリアムのマイニング報酬総額の推移

イーサリアムの1日当たりマイニング報酬総額の推移  etherscan.ioより

このチャートは、1日当たりのイーサリアムのマイニング報酬総額の推移です。
このチャートも、etherscan.ioで確認することができます。

これを見ると、Bizantiumハードフォークが近づくにつれてマイニング困難になり、マイニング報酬額が大きく減っていってます。
アイスエイジがリアルに迫っていた様子が分かりますね。

そしてBizantiumハードフォーク後、マイニングの困難さが改善されると同時にマイニング報酬も安定します。
ただし、1ブロック当たりのマイニング報酬は、5ETHから3ETHに減少していますので、その分、1日の報酬額全体も下がっています。

Constantinopleではどうなった?

今回のConstantinopleへのハードフォークでも、ディフィカルティボムをまた遅延させています。
今回の提案はEIP-1234

EIP-1234の内容
  • ディフィカルティボムの進行を、1年程度遅らせる。
  • マイニング報酬の額を3ETHから2ETHに下げる。

Constantinopleへのハードフォークも、2回も延期が重なりましたので、ディフィカルティボムの影響が出始めました。

ブロック生成時間は20秒を超え、マイニング報酬も下がってきた様子が、上の2つのチャートで分かります。

しかし、3月1日のハードフォーク成功で、状況は改善されています。
ブロック生成時間は、また平均15秒程度に戻っていることが確認できます。

次は、また1年後

今回、ディフィカルティボムを遅らせたことで、1年ほどの猶予ができたわけですが、逆に言えば1年後にまたなんらかの対処が必要になります。
これからの1年でPoSへの移行ができるほど開発が進めばよいですが、これまでの経緯やスピード感を見ていると、まだ時間がかかりそう。

いっそのことディフィカルティボムなんてやめてしまえばよいのに、とも思いますが、イーサリアムのコミュニティはそう考えないようですね。
イーサリアム開発の促進剤としてポジティブにとらえている感じ。

1年後どうなるか…
楽しみに待ってましょう!!