コンテンツへスキップ
0%

シャドウフォークとは?

Alchemy team headshot

執筆者 Alchemy

2022年6月24日 公開読了時間 1 分

シャドウフォークとは何か

シャドウフォークはdevnetに似ているが、独自のstateを持つ代わりに、別のネットワーク(devnetまたはmainnet)のstateをコピーする点が異なる。

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

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

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

シャドウフォークは通常のフォークとどう違うのか

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

コア開発者によるブロックチェーンのアップグレードがフォークを引き起こす例の1つが、Ethereumの手数料構造を最適化するEIP-1559を導入したLondon Hard Forkである。

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

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

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

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

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

ソフトフォーク

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

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

ハードフォーク

コードの変更が大きく、新しいバージョンが古いブロックと一緒に使えなくなる場合、これを「ハードフォーク」と呼ぶ。この場合、ブロックチェーンは2つに分かれる。

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

これにより新しい暗号通貨が生まれることになり、よく知られている多くの通貨がこうして誕生した。ハードフォークによって、元のBitcoinブロックチェーンからBitcoin Cashが生まれ、Ethereum(ETH)からEthereum Classic(ETC)が作られた。

シャドウフォークが重要な理由

シャドウフォークは、web3開発者にとって重要なツールである。ネットワークの今後のアップグレードに関する自分たちの想定を、mainnetの本番環境における最新の状況に照らしてテストできるからだ。

シャドウフォークは、EthereumのExecution LayerをProof-of-WorkからProof-of-Stakeへと変更したThe Mergeに備えるため、公開testnetsと並行して使用された。

シャドウフォークは、マージがネットワーク上で稼働している既存のappsに悪影響を与えることなく実現することを示す上で重要である。

これらのシャドウフォークを持つTestnetsは、円滑なマージ移行が行われることを確認するためのテストの場となり、ノードオペレーターやビルダーの信頼を醸成する助けとなる。

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

既存のGoerliチェーンからシャドウフォークが作成される様子を示す画像
An image showing how a shadow fork is created out of an existing Goerli chain. Source: AllCoreDevs Update #011 https://tim.mirror.xyz/PWFVaHY3Mrx7srarMmuBWya0J5kioR1l2xaH3p5APDk

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

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

その後、次のバリデーターがMerge後のBeacon Chainの最初のブロックを作る。

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

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

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

よく知られているシャドウフォークを最も多く経験した2つのtestnetがある。Goerliは3回、mainnetは6回のシャドウフォークを経験している。 2つのmainnetシャドウフォークの主な違いは、すべてのクライアントの組み合わせがシャドウフォークの移行を経ても同期を保ち続けた点である。

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

これは、シャドウフォーク上ではすべてのmainnetのデポジットが処理され、無効なものとしてマークされなければならないことを意味する。このリソースを多く消費する計算により、一部のクライアントでエッジケースの問題が発生したが、ネットワークは問題なく機能し続けた。

EthereumをシャドウフォークするにはA

Ethereumをフォークすることに関心がある場合は、Alchemyが提供する、free Alchemy account、HardHat、コマンドラインインターフェース(CLI)を使ったEthereum mainnetのフォーク方法のステップバイステップガイドを参照するとよい。

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

シャドウフォークは、Ethereumブロックチェーンの継続的な開発とスケーリング改善において重要な役割を果たしている。シャドウフォークを使うことで、コアEthereum開発者、ノードプロバイダー、独立したステーカーはネットワーク全体に及ぶ今後の変更に備えることができ、Ethereumアプリケーションのエコシステムが中断されることを防げる。

Background gradient

ブロックチェーンで魔法を生み出す

Alchemyは、最も強力なweb3開発者向けプロダクトとツールを、豊富なリソース、コミュニティ、そして卓越したサポートと組み合わせて提供します。