---
title: "reorgとは?"
description: "reorgとは何か、発生原因、その後に起こること"
---

## **リオーグとは何か**

チェーン再編成、いわゆる「リオーグ」は、バリデーターがブロックチェーンの最も正確なバージョンについて合意できない場合に発生する。リオーグは、複数のブロックが同時に生成された場合、バグが存在する場合、または悪意のある攻撃が行われた場合に起こる。リオーグは弱い方の重複ブロックチェーンを排除する。リオーグが長く続くほど、対応コストは高くなる。

ブロックチェーンのリオーグは、より長いチェーンが生成されたことでブロックがブロックチェーンから削除される結果をもたらす。これによりさらに、異なるマイナーが同時に同程度の難易度を持つ取引ブロックをチェーンに追加する作業を行うことになる。

これは、次のブロックを追加するマイナーが、フォークのどちら側が正しい、あるいは正規のチェーンかを判断しなければならないために起こる。マイナーやバリデーターがフォークまたは正規チェーンを選択すると、もう一方のチェーンは失われる。

再編成攻撃とは、古いチェーンが存続し続ける中でノードが新しいチェーンからブロックを受信することを指す。この場合、チェーンは分裂しフォーク、つまりブロックチェーンの複製版が作られることになる。

### **ブロックチェーンのリオーグは何が原因で起こるか**

ブロックチェーンのリオーグは、2つのブロックが同時に公開されることで起こる。1〜2ブロック程度の短いリオーグはネットワークの遅延によりよく発生するが、リオーグが1〜2ブロックを超えて長引く場合、悪意のある攻撃やネットワーク障害につながる可能性がある。

### **チェーン再編成にはどのような影響があるか**

チェーン再編成の主な影響は4つある。遅延とユーザー体験の悪化、ノードコスト、不確実性、そして攻撃への脆弱性である。

#### **1. 遅延とユーザー体験の悪化**

ノードコストの増加に加えて、リオーグは取引の遅延の可能性を高める。これは取引所にとって重大な問題である。取引所は取引が期限通りに確定することに依存しており、そうでなければ入金を長く待つことになるという影響を受ける可能性があるためである。

#### 2. ノードコスト

リオーグは時間の経過とともにブロックチェーン内のノード数を増加させ、ユーザー体験を悪化させる可能性がある。新しいフォークへの移行時には、状態更新にかかるメモリおよびディスクのコストが増加する。

#### **3. 不確実性**

リオーグが目立つようになると、ユーザーは取引が期限通りに実行される保証をあまり得られなくなる。十分な文脈がなければ、DeFiの取引はより悪い結果を招き、有害なMEV抽出にもつながる。

#### **4. 攻撃への脆弱性**

リオーグがより一般的になると、攻撃者は誠実なマイナー全体ではなく（「最長チェーンルール」により）その一部だけを上回ればよくなる。リオーグの数が多くなるほど、攻撃者の役割ははるかに容易になる。

## **正規チェーンとは何か**

<ImageBlock
  src="https://media.alchemy.com/1703848294-canonical-chain.png"
  alt="正規チェーンと破棄されたサイドチェーンを示す図"
  width={1544}
  height={438}
  caption="正規チェーン 出典 - Preethi Kasireddyhttps://www.preethikasireddy.com/post/what-do-we-mean-by-blockchains-are-trustless"
/>

正規チェーンとは、合意された「メインチェーン」である。したがって、途中で終わるサイドチェーンの一つとはみなされない。

理論上、ネットワークはどのチェーンが正規チェーンであるかを100%確信することはできない。これは、十分なハッシュパワーがあればサイドチェーンを継続することでブロック番号1を依然として覆すことが可能だからである。

## **フォークとは何か**

フォークは、コミュニティがブロックチェーンのプロトコルや基本ルールに変更を加え、実質的にチェーンを分裂（「フォーク」）させて、新しいルールに従う新チェーンと、ほぼ使われなくなる旧チェーンに分ける場合に発生する。

BitcoinやEthereumのようなブロックチェーンは、分散型のオープンソースソフトウェアによって動作し、ネットワークに利害関係を持つコミュニティメンバーによって維持されているため、ネットワーク参加者はソフトウェアへの変更を提案し、投票することができる。

### **フォーク選択ルールとは何か**

フォーク選択ルールとは、これまでに確認されたブロックやその他のメッセージの集合を入力として受け取り、クライアントに対して「正規チェーン」が何であるかを出力する関数である。

フォークは、複数の公開されたブロックが同じ前状態を参照している場合に発生する。ブロックチェーンは、2つのブロックがほぼ同時に公開されることで偶発的にこの事象に直面することもあれば、悪意のある行為者がチェーンから支払いを「取り除く」ためにフォークを作ろうとするなど、意図的に起こることもある。

いずれの場合も、ユーザーがどちらのフォークが正しい、あるいは「正規の」ものであるかを判断できる何らかの仕組みが必要である。これが「フォーク選択ルール」と呼ばれるものである。

フォーク選択ルールが必要なのは、選択肢となる有効なチェーンが複数存在しうるためである。これは、同じ親チェーンを持つ2つの競合するブロックが同時に公開される場合に起こりうる。

例えば、「最長の有効チェーンが勝つ」というのは、Proof-of-Workの仕組みに沿ったシンプルなフォーク選択である。ブロックチェーンが合意形成アルゴリズムの提案メカニズムとして機能できるようなフォーク選択ルールを定義することができる。それらは[Vitalik Buterin](https://medium.com/@VitalikButerin/minimal-slashing-conditions-20f0b500fc6c)が示したような特性を備えることになる。

以下の表に、3つのフォーク選択ルールを示す。

1. Nakamoto
1. GASPER
1. Tendermint

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Algorithm", dataType: "object" },
      { key: "2", width: 200, title: "Finality", dataType: "object" },
      { key: "3", width: 200, title: "Reorgs", dataType: "object" },
      { key: "4", width: 200, title: "Fork choice", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>Nakamoto (eg. PoW Ethereum / Bitcoin)</p>", tooltip: "", icon: "" },
        "2": { title: "<p>None</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Frequent</p>", tooltip: "", icon: "" },
        "4": { title: "<p>Longest chain</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>GASPER (eg. PoS ethereum)</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Every 2-epochs (~12 min)</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Very occasional</p>", tooltip: "", icon: "" },
        "4": { title: "<p>Chain with strongest support after last finalized block</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p>Tendermint</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Single block (~1-10s)</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Never</p>", tooltip: "", icon: "" },
        "4": { title: "<p>Only finalized blocks</p>", tooltip: "", icon: "" },
        id: 2,
      },
    ],
  }}
/>

### **ファイナリティとは何か**

ファイナリティとは、暗号資産の取引が完了した後、いかなる形でも変更、逆転、または取り消されることがないという完全な保証のことである。ファイナリティはブロックチェーン自体のレイテンシに依存する。ファイナリティは、取引が実行されるという保証を得るために待つ必要のある時間を測る指標としてよく用いられる。

## **Ethereumではリオーグに何が起こるか**

Ethereumは現在Proof-of-Workの合意形成メカニズムを使用している。Ethereumは「最長チェーンルール」と呼ばれるフォーク選択ルールを採用しており、クライアントに2つのブロックチェーンが提示された場合、難易度の合計が最も大きい方を選択する。これは、チェーン内の全ブロックの難易度の合計を比較することで行われる。

[Ethereum Beacon Chain](https://www.alchemy.com/overviews/the-ethereum-merge)は最近、潜在的なセキュリティリスクにつながりかねないリオーグを経験した。[The Beacon](https://www.alchemy.com/dapps/the-beacon) Chainはネイティブなステーキングを導入しており、これはEthereumが採用したProof-of-Stake合意形成モデルの主要な構成要素である。Ethereum内で発生したこのリオーグは7ブロックにわたって続き、ここ数年で最も長いリオーグの一つとなった。

Gnosisの CEO 兼共同創設者である**Martin Köppelmann**は、この7ブロックのリオーグの中で観察した内容をツイートした一人である。

7ブロックのリオーグとは、フォークが発生し、数百件の取引を含む7ブロックが破棄されたことを意味する。これにより、ユーザーが同じ資産を二重に使用できてしまうリスクが生じた。2〜3ブロック程度のリオーグは、ブロックチェーンがしばしば直面するネットワーク遅延による単なる不運のサインである可能性がある。Beacon Chainの場合もそうであった可能性がある。

5ブロック以上のリオーグは悪意のある攻撃の潜在的な兆候であることを踏まえると、開発者によれば、今回のEthereumのリオーグは悪意のあるものではなく、発生確率の低い事象に直面した結果だったようである。

[Vitalik Buterin](https://twitter.com/VitalikButerin/status/1529479408309768192?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1529479408309768192%7Ctwgr%5E%7Ctwcon%5Es1_&ref_url=https%3A%2F%2Fdecrypt.co%2F101390%2Fethereum-beacon-chain-blockchain-reorg)は迅速な対応の中で、古いバージョンのマイニングソフトウェアが原因である可能性があると述べた。Ethereumのコア開発者であるPreston Van Loon氏は、Beaconブロックチェーンのリオーグは、ネットワーク全体にまだ完全に展開されていなかったProposer Boostフォークの決定の展開が原因であったと述べた。

[Proposer boosting](https://github.com/ethereum/consensus-specs/pull/2730)は、タイムリーに受信された提案ブロックにより大きな重みを与えるために導入された。Proposer boostingは、事前（ex-ante）リオーグの問題を解決するために導入された。

<ImageBlock
  src="https://media.alchemy.com/1703848568-proposer-boosting.png"
  alt="Ethereumのリオーグ中に競合するチェーンの間でProposer boostingが選択を行う様子を示す図"
  width={795}
  height={122}
  caption="Proposer boosting| 出典 - Terrence Tsaohttps://twitter.com/terencechain/status/1529566839033933824"
/>

要するに、proposer boostingが有効になっているバリデーターは下側のチェーンを正規チェーンとみなしたが、proposer boostingが有効になっていないバリデーターは代わりに短い方の上側のチェーンを選んだ。これにより、それぞれのチェーンがそれぞれのバリデーターから投票を積み上げ続けることになった。

さらに、この再編成は、更新済みのクライアントソフトウェアと未更新のクライアントソフトウェアの間の、無視できない分断を示すものである。リオーグ自体は不適切なフォーク選択の兆候ではなかった。

Ethereum Beacon Chainのバリデーターは、あるクライアントアップデートが特定のクライアントを引き上げたことにより、同期が取れなくなった。その過程で、ブロックチェーンネットワーク上のバリデーターが混乱し、クライアントを更新しなかったため、7ブロックのリオーグにつながるフォークが発生した。

すべてのバリデーターが同じ設定で稼働していれば、この問題は発生しなかったはずである。

## **マージ後、リオーグはどうなるか**

リオーグの難易度は今後も時間をかけて緩やかに上昇し続ける。しかし、Ethereum Beacon ChainがProof-of-Stakeを実装するにつれ、[Gasper](https://arxiv.org/abs/2003.03052)と呼ばれるフォーク選択ルールが導入されることになる。

Gasperフォーク選択ルールは、アテスターの投票とアテステーションが導入され、ブロックに「重み」を与えることから、Ethereumブロックチェーンへの攻撃を極めて困難にするはずである。

アテスターを支配することは、フォーク選択ルールを支配することを意味する。これにより、少数の支配的なバリデーターに対する攻撃が数千のアテスターと競合する必要が生じるため、単一ブロックのリオーグはより困難になる。

### **プロポーザーとアテスターとは何か**

プロポーザーとアテスターは、Gasperフォーク選択ルールにおける2つの重要な役割である。**プロポーザー**は、12秒ごとに「スロット」に新しいブロックを提案する任務を持つバリデーターであり、**アテスター**は、正規チェーンの先頭とみなすものについて投票するバリデーターである。

1名のプロポーザーバリデーターは通常、全バリデーターの約1/32から成る委員会の一部としてランダムに選ばれる。この委員会の中には、アテスターも含まれている。

アテスターの投票は**アテステーション**と呼ばれ、ブロックに「重み」を与える。つまり、アテスターを支配することは、フォーク選択ルールを支配する能力を得ることも意味する。

委員会はプロポーザーとアテスターから成りランダムに選ばれるため、攻撃者が自分のバリデーターを特定のスロットに集中させる方法はない。

## **マージ後の課題**

全体として、単一または少数のアテスターグループによるブロックのリオーグはますます困難になっていくため、リオーグは以前ほど懸念材料ではなくなっていく。さらに、Ethereumの開発者は、リオーグの要件を厳しくするため、あるいは[単一スロットファイナリティの合意形成](https://notes.ethereum.org/@vbuterin/single_slot_finality)への移行の解決策を見つけるために、フォーク選択ルールに変更を加えることができる。単一スロットファイナリティの合意形成は、ユーザー体験を向上させ、MEVリオーグへの耐性を高め、プロトコルの複雑さとバグを削減することになるだろう。
