再開: Internet Computer のノードがブロックチェーンの最新のステートに素早く追いつく方法(日本語訳)
Medium の DFINITY 公式の記事 Resumption: How Internet Computer Nodes Quickly Catch Up to the Blockchain’s Latest State(2021/10/15) の日本語訳です。
レプリケーションにより、Internet Computer ブロックチェーン上のノードを再開し、プロトコルの最新のステートに追いつくことができる仕組みについての説明です。
By Manu Drijvers, Engineering Manager (Consensus) | DFINITY
Internet Computer のブロックチェーン は、世界中にある独立したデータセンターで、Internet Computer Protocol(ICP)を実行している数百のノード(最終的には今後10年間で数百万にスケールアップ)により作成されています。これにより、オープンなインターネット上に直接 Dapps、DeFi プラットフォーム、NFT、ウェブサイト、インターネットサービスを構築するキャニスタースマートコントラクトを実行するためのセキュアで信頼性の高い方法が提供されます。Internet Computer は、キャニスターのグループが一緒に実行されるサブネット(別名ブロックチェーン)を新たに追加することで、ネットワークの容量を無限に増やすことができる、初めてのスケーラブルなブロックチェーンです。
各サブネット内では、Internet Computer がキャニスターを高い信頼性 かつ セキュアに動作させます。
- セキュアとは、キャニスターのステートがキャニスターのルールに従ってのみ変化し、キャニスターのステートがそのコードが同意しないような改ざんが行われないことを意味します。
- 信頼性とは、サブネットのキャニスターが突然動かなくなることがないことを意味します。
ネットワークでは、レプリケーションと呼ばれる手法により、キャニスターがこのセキュアと信頼性を得ることを要求されます。サブネットのフードの下を覗くと、複数のレプリカによって動いているのがわかると思います。各レプリカは、キャニスターとプロセスのすべてのステート、およびキャニスターが処理すべきすべてのメッセージを保持しています。Internet Computer は、サブネットを動かしているレプリカの一部がオフラインであっても、あるいは悪意があっても、サブネットはキャニスターのメッセージを継続して処理します。より正確には、それらのレプリカの3分の1未満がオフラインまたは悪意を持っている限り(つまり、3分の2以上がオンラインで利用可能であり、プロトコルに参加している)、サブネットはレプリケーションの進行を継続します。ネットワークでは、すべてのレプリカがブロックチェーンを介して同じメッセージを処理するような、コンセンサスプロトコルが使用されています。
“Internet Computer のサブネットは、より少ないレイテンシーでより多くのデータを処理できるように設計されています。”
Internet Computer のサブネット上の各レプリカは、ブロックチェーンの独自のビューを持ち、各レプリカはゴシップネットワークを通じて人工物を交換しようとします。しかし、時々、一部のレプリカが利用できなくなることがあります。例えば、レプリカ1、2、3、4からなる4つのレプリカのサブネットで、おそらくレプリカ4が一時的にインターネットから切り離された場合です。Internet Computer Protocol はフォールトトレラントな方法で動作しているため、レプリカ4がオフラインになっても、サブネット上の残りの3つのレプリカは処理を進めることができるはずです。もし、今、別のレプリカが利用できなくなると、3分の1以上のレプリカがオフラインになるため、動作しないでしょう。レプリカ4が今オンラインに戻れば、プロトコルの最新のステートに完全に追いつくことができます。3分の2以上のノードが利用可能なため、ブロックチェーンは成長を続け、ネットワークのサブネットはメッセージの処理を続けるはずです。
さらに、ネットワークはある時点で、サブネットのフォールトトレランスを高めるためにノードを追加したいと思うかもしれませんが、このノードはサブネットのステートについて何も知らずにやってきます。ここでもノードは、プロトコルに参加できるように、サブネットの最新のステートに完全に追いつけるようにする必要があります。サブネット上のノードの3分の2以上がオンラインかつ利用可能であるときはいつでも、サブネットを動かすノードの一部がオフラインまたは悪意を持っている場合でも、サブネット上のキャニスターが非常に信頼性の高い方法で動作するように、サブネットは成長しなければなりません。その結果、正直なレプリカは、どんなに遅れていてもいつでも最新のステートに追いつくことができなければなりません。
ビットコインやイーサリアムなどの従来のブロックチェーンは、そのブロックが永遠に保存されることに依存してこの性質を実現しており、トランザクションを暗号学的に検証しブロックチェーンに参加するためには、そのすべてのブロックが必要です。例えば、現在ビットコインのブロックチェーンはおよそ350GB、イーサリアムはおよそ900GBと推定されており、これらを完全に同期させることは困難な作業です。Internet Computer のサブネットは、より少ないレイテンシで非常に多くのデータを処理するように設計されているため、すべての参加者がネットワーク上で動作しているフルブロックチェーン(訳注: 過去の全ブロックという意味)を持つことを要求するのは現実的でありません。このため、次のような課題があります。レプリカ1がサブネットの他のレプリカから大きく遅れていて、サブネットの他のすべてのレプリカが、レプリカ1が探しているブロックチェーンの一部をすでに削除してしまっていた としたらどうでしょうか。
もうひとつ複雑なのは、あるサブネットのノードが時間の経過とともに変化することです。プロトコルはサブネットのノードからの署名を検証することに依存しており、現在どのノードがサブネットを動かしているか分からないため、遅れているレプリカがどの署名を信頼すべきかを知ることは非常に難しいのです。
そこで、Internet Computer は、チェーンキー暗号を基盤として、すべての過去のブロックを必要とせずにノードが完全に参加できる(必要なすべての暗号検証を行う)新しい再開のアプローチを実装しています。すべてのサブネット(すなわち、すべてのブロックチェーン)は、時間が経過しても変化しない1つの固定された公開鍵を持ちます。対応する秘密鍵は、実際にはサブネットの参加者の間で共有されます。そして、サブネットのメンバーが変更された場合、秘密シェアは新しいノードへ安全に再配布されます。そして、サブネットのノードは、サブネットを代表して人工物に協調して署名できるようになります。このような人工物は、この固定されたサブネット鍵を用いて検証できます。
これにより、サブネットで署名されたオブジェクトの検証が非常に容易になります。必要なのは、時間の経過とともに変化しない、1つの固定された公開鍵だけだからです。非常に遅れていてサブネットの現在のノードを知らないレプリカでも、そのような署名を検証することができます。
再開問題を解決するために、Internet Computer はキャッチアップパッケージ(CUP)と呼ばれる特殊な人工物を導入しています。このCUPにより、レプリカはブロックチェーンの一部をスキップして、より新しい高さへセキュアにジャンプすることができます。この固定されたサブネット鍵を用いて署名されているため、遅れているレプリカでも常にその真正性を確認し、最新の状態をキャッチアップすることができるようになっています。正直なレプリカは、常にCUPが利用可能であることを確認し、他のレプリカがいつでもプロトコルの最新のステートに完全に追いつくことができるようにします。
残された問題: レプリカがセキュアにスキップできるようにするには、このCUPには一体何が必要でしょうか?その答えを得るために、まずはプロトコルの詳細を見てみましょう。 Internet Computer のブロックチェーンは、サブネット上で実行されるべきメッセージを命令し、その結果、キャニスターのすべてのメモリを含むサブネットの複製されたステートが得られます。前の複製されたステートとブロック内のメッセージを使って、すべてのレプリカは次の複製されたステートを計算することができます。レプリカが追いつくためには、レプリカが自力で次の状態を計算できるように、これらの複製されたステートのうちの1つを持つ必要があります。さらに、ブロックはこれらの複製されたステートを参照し、その有効性はブロックチェーン内のこの複製されたステートおよび後続のブロックの一部と照合されます。これにより、Internet Computer は、例えば、1つのメッセージがブロックチェーンに複数回登場しないことと、複数回処理されないことを要求できます。このようなチェックを行うには、レプリカが正しい複製されたステートを持つだけでなく、ブロックチェーンのある部分を持つ必要があり、これもCUPに必要なもう1つの要素です。
最後に、ランダムビーコンがあります。すべての高さに、ランダムビーコンと呼ばれる、予測できない値を持つランダムに見える人工物があり、過去のランダムビーコンは次のランダムビーコンを検証する必要があります。また、ランダムビーコンはコンセンサスプロトコルで役割を選択するために使用されるため、コンセンサスの人工物を検証するためにも必要です。レプリカが完全に追いつくためには、ランダムビーコンが必要になる可能性が高いでしょう。
これで、CUPの定義ができました。レプリカは定期的にCUPを作成します(例:高さ200毎)。高さ200に達すると、レプリカはCUPを作成する時期かどうかをチェックします。レプリカは、ランダムビーコンが利用可能かどうか、その高さのブロックがあるかどうか、そして複製されたステートがあるかどうかを確認します。さらに、ブロックチェーンが高さ200より古いステートが不要になるところまで進んでいるかどうかもチェックします。これらすべてが満たされると、レプリカは高さ200のCUPを作成する準備が整ったことになります。彼らは複製されたステート、ブロック、ランダムビーコンを1つの人工物にまとめ、特別なサブネット公開鍵で署名を行います。
これで、この人工物は他のレプリカが追いつくのに十分なものになったはずです。複製されたステートは、実際にはCUPに含めるには大きすぎることに注意してください。したがって、複製されたステータスのハッシュのみが含まれます。(完全なステートは、このブログ記事の範囲外である別のステート同期プロトコルによって取得できます)。レプリカがこのようなCUPの作成に成功するたびに、レプリカが追いつけることがわかっているので、古い人工物をすべて捨てることができるようになりました。他のレプリカから大きく遅れたレプリカがネットワーク経由でCUPを取得した場合、そのCUPは既知のサブネット公開鍵の下で特別な方法で署名されているので、この人工物の真正性を検証し、その内容を信頼することができるのです。
レプリカがCUPを使って、ブロックチェーンの最新の状態に追いつく方法を考えてみましょう。CUPはランダムビーコン、ブロック、そして複製されたステートを取得しますが、これらはチェーンキー暗号によって認証されているため、信頼できます。これにより、レプリカはランダムビーコンのチェーンをたどることができます。なぜなら、レプリカは次のビーコンを検証するための前のビーコンを持っているからです。また、レプリカはブロックを持つので、後続のブロックを追跡し、公証とファイナライゼーションを検証することができます。レプリカは複製されたステートと後続のブロックを持つので、次のステートを計算することができます。レプリカは最新のブロックチェーンとランダムビーコンの人工物、そして最新の複製されたステートを持つことで、完全に最新の状態でプロトコルに参加できるようになったことを意味します。
要約すると、Internet Computer は、サブネットを動かすマシンの一部がオフラインであっても、信頼性の高い方法でキャニスターを動かすことができます。より正確には、サブネット上のレプリカの3分の2以上が正直で かつ オンラインであるときはいつでも、サブネットは前進し、ブロックチェーンは成長するはずです。その結果、すべての正直なレプリカは、どんなに遅れていても、常に最新のステートに追いつくことができるはずです。同時に、ブロックチェーンは非常に大きくなる可能性があるため、レプリカは最終的にブロックチェーンのすべての部分を削除しなければなりません。キャッチアップパッケージ(CUP)と呼ばれる特別な人工物は、固定のサブネット公開鍵を使って認証されます。CUPには、レプリカがブロックチェーンの一部をセキュアにスキップし、プロトコルに完全に参加できるような最新のステートへジャンプするために必要なすべてのものが含まれています。
____