---
title: "シャドウフォークとは?"
description: "シャドウフォークの重要性:使用される理由とアプリケーションのテスト方法"
---

## **シャドウフォークとは**

**シャドウフォークはdevnetに似ていますが、独自の状態を持つ代わりに、別のネットワーク（devnetまたはmainnet）の状態をコピーします。**

例えば、Ethereumのメインネットワークのシャドウフォークは、mainnetに送られるすべてのトランザクションを引き続き受け入れます。

このブランチはProof-of-Stakeに切り替わることができますが、mainnetのトランザクションやその他の状態・履歴データはそのまま保持します。

シャドウフォーク上でマージが成功すると、Proof-of-Stakeチェーンへ進み、mainnetに追加されたProof-of-Workブロックは無視されます。

### **シャドウフォークと通常のフォークの違いは何か**

シャドウフォークが、元のチェーンの既存の状態データを使ってネットワークアップグレードをテストするために意図的に作られるのに対し、通常のフォークは開発コミュニティがプロトコルを変更したり、ハッキングの影響を受けたりした際に発生します。フォークが起こると、ブロックチェーンは分岐し、最初のチェーンと同じ履歴を持ちながら異なる経路をたどる2つ目（新規）のブロックチェーンが生まれます。

コア開発者によるブロックチェーンのアップグレードがフォークを引き起こす例の一つが、Ethereumのトランザクション手数料構造を最適化するEIP-1559を導入した[London Hard Fork](https://www.alchemy.com/overviews/what-is-eip-1559)です。

BitcoinとEthereumはどちらもブロックチェーン技術に基づいており、オープンソースソフトウェア上で動作します。これらが「ブロックチェーン」と呼ばれるのは、ネットワーク上の最初のトランザクションまで遡って連結できるデータのブロックで構成されているためです。

オープンソースであるため、そのコミュニティがソースコードの保守・改善を担っています。その結果、ブロックチェーンをより安全にするため、新機能を追加するため、あるいは2016年のThe DAOハッキング後に発生したような被害を軽減するために、フォークが起こることがあります。

2016年、Ethereumブロックチェーンは、盗まれた360万ETHを反映した正確な台帳を維持するEthereum Classicと、ハッキングを取り消すためにフォークしたEthereumに分岐しました。

### **ソフトフォークとハードフォークの違いは何か**

ソフトフォークとハードフォークの違いは、ソフトフォークが既存のブロックチェーンのコードを変更するのに対し、ハードフォークはブロックチェーンを2つの別個のブロックチェーンに分けるという点です。

#### ソフトフォーク

ソフトフォークは、ブロックチェーンを動かすソフトウェアへのアップデートと考えることができます。全員がそれを使い続ける限り、それがネットワークの新しいルールセットになります。

ソフトフォークは、通常コードベースとクライアントソフトウェアを変更することで、Ethereumに新しい機能や機能性を追加するために使われてきました。最終的な結果が単一のブロックチェーンになるため、この変更はフォーク以前に作られたブロックとも整合します。

#### ハードフォーク

コードの変更が大きすぎて、新しいバージョンが古いブロックと共に使えなくなる場合、これは「ハードフォーク」と呼ばれます。この場合、ブロックチェーンは2つの部分に分裂します。

1. 古いルールに従う古いブロックチェーン
1. 新しいルールに従う新しいブロックチェーン

これによって全く新しい暗号資産が生まれ、多くの有名な通貨がここから誕生しました。ハードフォークによって、元のBitcoinブロックチェーンからBitcoin Cashが、Ethereum（ETH）からEthereum Classic（ETC）が作られました。

## **なぜシャドウフォークが重要なのか**

**シャドウフォークは、web3開発者にとって重要なツールです。なぜなら、mainnetの本番環境における最新の状態に対して、ネットワークの今後のアップグレードに関する前提をテストできるからです。**

[Kilnテストネットワーク](https://www.alchemy.com/overviews/kiln-testnet)は、Ethereumの実行レイヤーをProof-of-WorkからProof-of-Stakeに変更する[The Merge](https://www.alchemy.com/overviews/the-ethereum-merge)に向けて開発者がテストを行う最後のテストネットです。

シャドウフォークは、ネットワーク上で稼働している既存の[アプリ](https://www.alchemy.com/dapps/top/defi-dapps)に有害な移行をもたらすことなくMergeが実現することを示す上で重要です。

これらのシャドウフォークを持つ[テストネット](https://www.alchemy.com/overviews/what-are-testnets)は、円滑なマージ移行を確実にするためのテストの場となり、ノードオペレーターやビルダーの信頼構築にも役立ちます。

## **シャドウフォークはどのように機能するのか**

<ImageBlock
  src="https://media.alchemy.com/1703849021-how-shadow-fork-works.png"
  alt="既存のGoerliチェーンからシャドウフォークが作成される様子を示す画像"
  width={601}
  height={546}
  caption="既存のGoerliチェーンからシャドウフォークが作成される様子を示す画像。出典: AllCoreDevs Update #011 https://tim.mirror.xyz/PWFVaHY3Mrx7srarMmuBWya0J5kioR1l2xaH3p5APDk"
/>

上の画像において、一番上の行のGoerliブロックは、シャドウフォークについて何も知らない正規（つまり、オリジナル）のブロックチェーン上のノードを示しています。

真ん中の行のGoerliブロックは、terminal total difficulty（TTD）、つまりクライアントがマイニングを停止しPoSへ移行するトリガーとして使われる合計マイニング難易度に達した際に分岐するよう指示する、異なる設定を持つシャドウフォークチェーン上のノードを表しています。
最後の行には、このシャドウフォーク専用に作られたBeacon Chainの画像があります。TTDに達すると、正規チェーン上のノードは何事もなかったかのようにブロックを作り続ける一方、設定が変更されたノードは分岐してMergeを経ます。

その後、次のバリデーターが[Merge後のBeacon Chain](https://www.alchemy.com/overviews/what-is-the-ethereum-beacon-chain)の最初のブロックを作成します。

シャドウフォーキングは、公開テストネットやmainnetに影響を与えることなく、フォークとマージのプロセスがどれだけうまく機能するかをテストできるため、これを行うための最良の方法です。

このシャドウフォーク作業を繰り返し行うことで、開発者はさまざまな状況下でのマージ移行をテストできます。

## **よく知られているシャドウフォークにはどのようなものがあるか**

**2つのテストネットが、特によく知られたシャドウフォークを持つものとして際立っています。Goerliはこれまでに3回のシャドウフォークを経ており、mainnetは6回のシャドウフォークを経ています。** 2回のmainnetシャドウフォークの主な違いは、すべてのクライアントの組み合わせがシャドウフォークの移行を乗り越え、同期状態を保ったことでした。

このシャドウフォークでは、各クライアントのdevelop/unstableブランチも使用されています。つまり、開発者はブランチをマージする必要がなくなったということです。mainnetでは、デポジットコントラクトが別のフォークIDで再度使用されました。

これは、シャドウフォーク上では、すべてのmainnetのデポジットを処理し、無効としてマークする必要があることを意味します。この計算負荷の高い処理により、一部のクライアントでいくつかのエッジケースが発生しましたが、ネットワーク自体は問題なく機能しました。

## **Ethereumをシャドウフォークする方法**

Ethereumのフォークに関心があるなら、Alchemyが提供する[Ethereum mainnetをフォークする方法](https://www.alchemy.com/docs)についてのステップバイステップガイドを、[無料のAlchemyアカウント](https://www.alchemy.com/?a=ddab180718)、HardHat、コマンドラインインターフェース（CLI）を使って参照できます。

## **シャドウフォークはEthereum開発者にとって重要なツールである**

シャドウフォークは、[Ethereumブロックチェーンの継続的な開発とスケーリングの改善](https://www.alchemy.com/overviews/ethereum-scaling-solutions)において重要な役割を果たしています。シャドウフォークによって、コアEthereum開発者、ノードプロバイダー、独立したステーカーは、Ethereumアプリケーションエコシステムが中断されないよう、今後のネットワーク全体の変更に備えることができます。
