# [EIP1234] PoS実装の遅延によりマイニングの難易度増加を緩和する提案を理解しよう！

> イーサリアムネットワークで進行中の変更についてのものです（当時）。イーサリアムは、トランザクションを処理し新しいブロックを生成するためのルールを定めるブロックチェーン技術を使用しています。

- URL: https://cardene.dev/articles/f4d3f155968be681a00d
- 公開日: 2024-02-04
- 更新日: 2024-02-04
- トピック: Blockchain
- タグ: ethereum, solidity, smartcontract, ブロックチェーン

## はじめに

初めまして。
**CryptoGames**というブロックチェーンゲーム企業でエンジニアをしている **cardene（かるでね）** です！
スマートコントラクトを書いたり、フロントエンド・バックエンド・インフラと幅広く触れています。

https://cryptogames.co.jp/

代表的なゲームは**クリプトスペルズ**というブロックチェーンゲームです。

https://cryptospells.jp/

今回は、Ethereumの平均ブロック生成時間の増加に対処するため、難易度爆弾を約12ヶ月遅延させる提案している**EIP1234**についてまとめていきます！

:::message
以下にまとめられているものを翻訳・要約・補足しながらまとめていきます。
:::

https://eips.ethereum.org/EIPS/eip-1234

他にも様々なEIPについてまとめています。

https://cardene.notion.site/ERC-EIP-2a03fa3ea33d43baa9ed82288f98d4a9?pvs=4

## 概要

イーサリアムネットワークで進行中の変更についてのものです（当時）。
イーサリアムは、トランザクションを処理し新しいブロックを生成するためのルールを定めるブロックチェーン技術を使用しています。
このネットワークでは、「**難易度爆弾**」と呼ばれるメカニズムがあり、ネットワークのセキュリティを高めるために設計されたものです。
しかし、この難易度爆弾によってブロック生成時間が長くなりすぎると、ネットワークの効率が悪化します。
この問題に対処するために、イーサリアムコミュニティはConstantinopleアップデートを通じて難易度爆弾を遅らせることを提案しています。
これは、難易度爆弾が発動するタイミングを実質的に後ろに延ばし、ネットワークの難易度増加を緩和することを意味します。
その結果、ブロック生成時間が短縮され、ネットワークのパフォーマンスが改善されることが期待されます。

また、このアップデートではブロック報酬も変更されます。
具体的には、ブロック1つあたりの報酬が`2ETH`に減少されます。
これは、ネットワークのインフレ率を抑制し、長期的な経済的安定性を確保するための措置です。
ancle報酬とnephew報酬も新しい報酬体系に合わせて調整され、全体的な報酬バランスが維持されます。

この提案は、イーサリアムが将来的にプルーフ・オブ・ステークモデルに完全に移行するまでの一時的な解決策として位置づけられています。
プルーフ・オブ・ステーク移行後は、難易度爆弾は不要となるため、これらの調整はその時点で再評価されることになります。

:::message
以下の提案と似ているため、先に以下の記事を読むことをお勧めします。
:::

[\[EIP649\] difficulty bombを遅延させてブロック報酬を調整する提案を理解しよう！](/articles/c553ec071cb5015c1254)

:::message
#### 難易度爆弾

難易度爆弾（Difficulty Bomb）は、イーサリアムネットワークのブロックチェーンプロトコルに組み込まれた機構で、ネットワークのマイニング難易度を人為的に時間とともに増加させるものです。
この機構は、イーサリアムが将来プルーフ・オブ・ワーク（PoW）からプルーフ・オブ・ステーク（PoS）への移行を促進するために設計されました。
難易度爆弾が発動すると、マイニングの難易度が指数関数的に増加し、ブロックの生成時間が徐々に長くなります。

この「**氷河期**」とも呼ばれる現象は、イーサリアムが長期的にPoWを続けることを防ぎ、システムのアップデートやコンセンサスメカニズムの変更を奨励するために導入されました。
つまり、難易度爆弾はマイナーとネットワーク参加者に対し、PoSへの移行をスムーズに行うためのインセンティブとして機能します。

しかし、PoSへの移行が予定より遅れたり、他の理由でネットワークのアップデートが必要になった場合、難易度爆弾は一時的に遅延させることができます。
これは通常、ハードフォークを通じて実施され、新しいルールで難易度爆弾の影響を抑制またはリセットします。
これにより、ブロック生成時間が再び正常に戻り、ネットワークの運用が継続されます。

難易度爆弾は、イーサリアムの持続可能性と進化を促すための重要な機構ですが、その管理と調整はネットワークの健全性を維持するために慎重に行われる必要があります。
:::

## 動機

イーサリアムは、Casperというアップデートを通じてプルーフ・オブ・ステーク（PoS）という新しいコンセンサスメカニズムに移行する予定でしたが、この移行が遅れています。
現在のプルーフ・オブ・ワーク（PoW）メカニズム、特にEthashアルゴリズムは、この遅延の間もマイナーが効率的にブロックを生成し続けることを可能にしています。
この状況下で、平均15秒おきに新しいブロックを生成することが、さらに12ヶ月間可能であるとされています。
「**氷河期**」または「**難易度爆弾**」とは、イーサリアムネットワークの難易度を時間とともに意図的に高めるメカニズムのことで、これによりマイニングが困難になり、ブロック生成時間が長くなります。
このメカニズムは、イーサリアムがPoSに移行するための一つの促進要因として設計されていましたが、PoSへの移行が遅れているため、難易度爆弾の影響を遅らせる必要がありました。

提案されているブロック報酬の削減は、氷河期の遅延によってシステムが直面する可能性のあるインフレや他の経済的不均衡を防ぐことを目的としています。
報酬を削減することで、マイナーによる過剰な報酬の追求を抑え、チェーンの分裂リスクを低減することができます。
これは、イーサリアムが将来的にプルーフ・オブ・ステークに移行する際の安定性を高める重要な措置となります。
これらの変更はイーサリアムネットワークをより持続可能で安全なものにするために慎重に計画されています。

## 仕様

イーサリアムネットワークのコンスタンティノープルフォークに関連する提案を説明しています。
主に、マイニングの難易度調整とブロック報酬の調整に焦点を当てています。

### 難易度調整に偽ブロック番号を使用
難易度計算において、氷河期（難易度爆弾）に関連する指数関数的な増加を緩和するために、実際のブロック番号(`block.number`)の代わりに`fake_block_number`を使用します。
この偽ブロック番号は、コンスタンティノープルフォーク以降のブロックに対して、ブロック番号から`5,000,000`を引いた値か0の大きい方を使用します。
これにより、難易度の急激な上昇を抑制し、マイニングの難易度を適切なレベルに保ちます。

```
fake_block_number = max(0, block.number - 5_000_000) if block.number >= CNSTNTNPL_FORK_BLKNUM else block.number
```

### ブロック、オンクル、ネフュー報酬の調整
イーサリアムのEther発行量を一定に保つため、コンスタンティノープルフォーク以降のブロック報酬を新しい値(`new_block_reward`)に調整します。
この新しいブロック報酬は`2E18 wei`（`2,000,000,000,000,000,000 wei`、または`2 ETH`）と設定されています。

```
new_block_reward = 2_000_000_000_000_000_000 if block.number >= CNSTNTNPL_FORK_BLKNUM else block.reward
```

ancle報酬も、コンスタンティノープルフォーク以降にancleが含まれるブロックについて新しいブロック報酬に基づいて調整されます。
具体的には、`new_uncle_reward = (8 - k) * new_block_reward / 8`の式で計算されます。
ここで、`k`はメインブロックとオンクルブロックの番号の差です。
これは、コンスタンティノープルフォーク以前のancle報酬の計算方法を新しいブロック報酬に適応させたものです。

```
new_uncle_reward = (8 - k) * new_block_reward / 8
```

nephew報酬も、コンスタンティノープルフォーク以降のブロックについて新しいブロック報酬に基づいて調整され、`new_nephew_reward = new_block_reward / 32`となります。
これもコンスタンティノープルフォーク以前のnephew報酬の計算方法を新しいブロック報酬に適応させたものです。

```
new_nephew_reward = new_block_reward / 32
```

これらの調整により、イーサリアムネットワークの難易度を適切に管理し、Etherの発行量を一定に保つことを目指しています。
これは、ネットワークの持続可能性と安定性を確保するための重要な措置です。

## 補足

「**氷河期**」の遅延提案は、イーサリアムブロックチェーン上でブロック生成時間の増加を緩和することを目的としています。
氷河期はイーサリアムのプロトコルに組み込まれた機構で、特定の時間が経過するとマイニング難易度が急激に上昇し、結果としてブロック生成時間が長くなります。
この機構は、将来的にイーサリアムがプルーフ・オブ・ステークへの移行を促進するために設計されましたが、移行が遅れた場合にネットワークに不便をもたらす可能性があります。
提案された遅延は、この難易度の急激な上昇を一時的に避け、ブロック生成時間をより管理しやすいレベルに保つことを目指しています。
これにより、2019年冬までにブロック生成時間を30秒まで戻すことが期待されます。
また、難易度を特定のブロック間で一時停止させるという代替案も提案されており、これは同じ目的を達成するための別の手段です。
これらの提案は、イーサリアムの開発者コミュニティによるミーティングで討議され、コンスタンティノープルアップデートの一環として受け入れられました。
これらの措置は、イーサリアムネットワークの安定性を維持し、ユーザーや開発者にとってより予測可能な環境を提供することを目的としています。

## 互換性

イーサリアムのネットワークアップデートに関連する特定の改善提案（EIP）について説明しています。
提案された変更は、イーサリアムのブロックチェーンにおける難易度の計算方法やマイニングによる報酬の配分構造（ブロック報酬、ancle報酬、nephew報酬）に大きな変更を加えるものです。
このような変更は、既存のシステムやプロトコルとの互換性がないため、継続的な運用に影響を及ぼす可能性があります。
そのため、このEIPをイーサリアムネットワークに安全に導入するためには、ハードフォーク（ブロックチェーンのルールを変更し、古いルールに従うブロックチェーンと新しいルールに従うブロックチェーンに分岐させるプロセス）を通じて行う必要があります。
ハードフォークは、ネットワーク全体で合意された特定のブロック番号で実行される予定です。

このEIPを含めるハードフォークは、イーサリアムの大規模アップデート計画「メトロポリス」の第二段階である「コンスタンティノープル」として提案されています。
メトロポリスは、イーサリアムネットワークのセキュリティ、効率性、およびスケーラビリティを向上させるための一連のアップデートです。
この提案により、イーサリアムはより発展した形での運用が可能となり、同時にユーザーや開発者にとってより良い体験を提供することを目指しています。

## 引用

Afri Schoedon (@5chdn), "EIP-1234: Constantinople Difficulty Bomb Delay and Block Reward Adjustment," Ethereum Improvement Proposals, no. 1234, July 2018. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-1234.

## 最後に

今回は「Ethereumの平均ブロック生成時間の増加に対処するため、難易度爆弾を約12ヶ月遅延させる提案している**EIP1234**」についてまとめてきました！
いかがだったでしょうか？

質問などがある方は以下のTwitterのDMなどからお気軽に質問してください！

[Twitter @cardene777](https://twitter.com/cardene777)

他の媒体でも情報発信しているのでぜひ他も見ていってください！

https://chaldene.net/

https://zenn.dev/heku

https://mirror.xyz/0xcE77b9fCd390847627c84359fC1Bc02fC78f0e58

https://cardene.notion.site/ERC-EIP-2a03fa3ea33d43baa9ed82288f98d4a9?pvs=4
