Bitcoin Cash 2020-11-15 ハードフォーク

自己紹介

  • haryu703

目次

  1. 今回のハードフォークの内容
  2. BCHとABC
  3. ハードフォーク後の動向

1. 今回のハードフォークの内容

  • ASERT
    新しい難易度調整アルゴリズムの導入
  • Automatic Replay Protection
    今回で廃止

1.1. ASERTの概要

  • 新しい難易度調整アルゴリズム
  • 難易度のぶれを小さくし、ブロック生成時間を安定させる
  • 正式な名前はaserti3-2d

1.2. 今までの難易度調整アルゴリズム

  • 2017年11月のハードフォークで導入された
  • cw-144と呼ばれる
  • 過去144ブロックの生成間隔の移動平均などから難易度を決める
  • 難易度が変化しやすい分、ぶれが激しい
  • 難易度の低い間だけBCHをマイニングされることが問題(turbo blocks)
    • BCHだけマイニングしている人は損をする
    • ブロック生成間隔が不安定になる
    • 取引所の承認数が引き上げられる

1.3. ASERT

  • next_target=old_target2time_deltaideal_block_time(height_delta+1)halflifenext\_target = old\_target * 2^{time\_delta - ideal\_block\_time * (height\_delta + 1) \over halflife}
    • old_targetold\_target: anchor blockのtarget
    • time_deltatime\_delta: evaluation blockanchor blockの親のtimestampの差
    • ideal_block_timeideal\_block\_time: 目標のブロック生成間隔(600秒)
    • height_deltaheight\_delta: evaluation blockanchor blockのblock heightの差
    • halflifehalflife: 定数のパラメータ、単位は秒。mainnetは172800(=2日)
    • next_targetnext\_target: evaluation blockの次のブロックのtarget
  • anchor blockはASERT有効化前の最後のブロック
  • 計算は整数値のみで行う
  • 2n2^nの計算は3次の近似多項式を使う
  • この式の定数などがaserti3-2dという名前の由来になっている
  • ブロックが10分間隔で作られている場合

    next_target=old_target2600(height_delta+1)600(height_delta+1)172800=old_target\begin{aligned} next\_target &= old\_target * 2^{600 * (height\_delta + 1) - 600 * (height\_delta + 1) \over 172800} \\ &= old\_target \end{aligned}

  • ブロックが5分間隔で作られている場合

    next_target=old_target2300(height_delta+1)600(height_delta+1)172800=old_target2300(height_delta+1)172800\begin{aligned} next\_target &= old\_target * 2^{300 * (height\_delta + 1) - 600 * (height\_delta + 1) \over 172800} \\ &= old\_target * 2^{-300 * (height\_delta + 1) \over 172800} \end{aligned}

    • 576ブロック(2日)でtargetは半分(難易度は倍)になる
  • ブロックが60分間隔で作られている場合

    next_target=old_target23600(height_delta+1)600(height_delta+1)172800=old_target23000(height_delta+1)172800\begin{aligned} next\_target &= old\_target * 2^{3600 * (height\_delta + 1) - 600 * (height\_delta + 1) \over 172800} \\ &= old\_target * 2^{3000 * (height\_delta + 1) \over 172800} \end{aligned}

    • 57.6ブロック(2日)でtargetは倍(難易度は半分)になる

1.4. Automatic Replay Protection

  • 計画的なハードフォークでノードの更新を強制する仕組み
  • ABC以外のノードではもともと導入されていなかった
  • ハードフォークする日付が前回のハードフォーク時に決まる
  • 前回のハードフォークでIFPの議論が不十分なまま実装された一因
  • 今回のハードフォーク以降は仕様から外される

2. BCHとABC

  1. [~5月] IFPの議論から、Bitcoin ABC(ABC)のIFPに反対する開発者がBitcoin Cash Node(BCHN)を立ち上げる
  2. [7月頃] ASERTが提案される
  3. [7月頃] ABC側でGrasbergという別の難易度調整アルゴリズムが提案される
  4. [~8月] コミュニティの議論の中でASERTが優勢となる
    • ABC以外の主なノード実装はASERTを採用する
  1. [8月] ABCがASERTを受け入れるが、同時にIFPを強制するルールも追加する
    • ABCがソフトフォークすることになる
  2. [8月~] 大手のマイナーがBCHNを支持するシグナルを出し始める
  3. [8月~] BCHとABCのハードフォーク後の先物取引を始める取引所が出てくる
  4. [11月] ABCがBCHNのネットワークに従う実装もサポートし始める (Bitcoin ABC BCHN Edition)

3. ハードフォーク後の動向

おわりに

  • 今回の分裂はコミュニティ主導のプロジェクトをコミュニティが守るという点で成功
  • BCHNを中心としたBCHコミュニティの尽力あっての成功
  • コミュニティの分裂という痛みは今回もあった