Cardanoの時間処理パート1:Ouroboros、そして決定性の重要性について
ブロックチェーンの設定でグローバルコンセンサスを確保する上で欠かせないオンチェーンのタイムキーピング。Cardanoの時間処理を解説します
2022年 12月 7日 8 分で読めます
画像:Noor Younis
本稿は、Arnaud Bailly、Michael Peyton Jones、Sebastian Nagel、Polina Vinogradova、Brian Bushによる共同執筆です。
時間はブロックチェーンシステムへの参加者全員に必然的に関連し、Ouroborosコンセンサスプロトコルのセーフティプロパティをサポートおよび維持する上で極めて重要です。発行されたブロックは、前ノードにタイミングよく伝播されることが期待されます。したがって、時間はコンセンサスに達するためにグローバルに受け入れられる表現の構築を必要とします。
Ouroborosの時間処理
ローカルでは、ノードはwall-clockシステムを使って時間の経過を測ります。このクロックのコードは、スロット長がハードフォーク境界の時点で多岐にわたる可能性があるため複雑であり、時間はこれを考慮して慎重に計算する必要があります。
コードはcurrentSlotに至るまでに4ステップを実施します。
- 次のスロットまでの残り時間に対応する遅延、または現行スロットが不明の場合(同期時に発生)には任意の60秒の遅延を待機
- 現在のシステム時間を取得し、これを現開発期のスロット長に応じてスロット番号に換算
- 新スロットが前のスロットよりも大きい場合、新しい現行スロットを「ティック」する
- 上記に当てはまらない場合、もう少し待機するか、現在の時間があまりにも前にジャンプした場合にはエラー報告をする
ローカルのcurrentSlotはノードの台帳の先端から報告されたスロットと比較されます。後者の方が古い場合は、ノードがその状態をチェーンと同期していることを意味するため、無視されます。
スロット長はハードフォークで変更される可能性もあるため、コンセンサスは、ハードフォークが発生しえない将来の固定点(安定ウィンドウ)までしかスロットを時間に換算することができません。実際、トランザクションのファイナリティとチェーンの状態の不変性を保証するために必要とされる時間の尺度を提供するため、安定ウィンドウは不可欠です。安定ウィンドウの間、ネットワークは少なくともkブロックを生成する必要があります。ここで、kはチェーンが不変になるまでのブロック数です。安定ウィンドウには最大3k/fかかる場合があり、これは現在のパラメーターで36時間、または約1日です。
現在の課題
情報が移動できる速度には、光の速度という基本的な物理的制限があります。これは、ノードのネットワークを介した時間の同期には 時間がかかることを意味します。
Network Time Protocol(NTP)は、同期メカニズムを提供するために存在します。 これは、時間制限と測定の違いに対処します。一方、NTPは単調な増加を保証しません。時間が数秒から時には数時間前後してジャンプすることがあります。例えばSpannerが提供するグローバルクロックのように、正確で信頼性の高いクロックをグローバルスケールで提供する既存のシステムは、一元化されています。
現在のCardanoは以下の通りです。
- ネットワークパラメーターは、チェーン上で観測可能な時間間隔(ブロック時間など)の粒度が20秒になるように設定されます。これは、スロット長(1秒)をブロック係数f(予想されるブロック頻度 0.05)で割った値に等しくなります。 これらのパラメーターが短期的に変更される可能性はほとんどありません。
- この20秒は、ネットワーク全体で新しいトランザクションとブロックを複製するという制約(数千のノードで、世界中で300ミリ秒のTCP遅延)を考慮して、プロトコルの安全性を保証するための最適なバジェットとして決定されています。ブロックスループットは将来的に増加する可能性がありますが、観測可能なオンチェーン時間の粒度が低下する可能性はあまりありません。
- トランザクションのファイナリティは約1日で達成されますが、Ouroborosコンセンサスの設計上1日未満で生じることは不可能です。数分または数時間ですでに高レベルの信頼度に達していますが、ブロックが最終的に破棄される可能性は、その深さとこのブロックを採用する必要があるノードの数に応じて指数関数的に減少することに注意してください。
最後に、長期的には、現在のOuroborosプロトコルは Ouroboros Chronosに置き換えられる予定です。Ouroboros Chronosは、ブロックチェーン技術に基づく最初の高回復性暗号タイムソースを提供することによって、タイムキーピングの課題に対処します。
ブロックチェーン環境における決定性の重要性
現在の文脈では、決定性とは、所与のトランザクションが台帳の状態に「固定効果」を持つことを意味します。しかし、後方決定性と前方決定性の概念を区別することが重要です。
ブロックチェーンは、固定された一連のトランザクション(ブロック単位でグループ化)を複製して、世界の状態について合意に達するという原則に基づいています。すべてのブロックチェーンには歴史的決定性があります。つまり、チェーン内のトランザクションには固定効果があります。さもなければ、チェーンの検証結果が非決定性的となり、コンセンサスが壊れる可能性があります。
しかし、前方決定性を持つブロックチェーンはわずかです。これは、チェーンにまだ追加されていないトランザクションに固定効果がある(または適用されない)ことを意味しています。Cardanoは前方決定性を持ちます(現行のポインターアドレスを除く。これは、CIPで削除提案中)。Cardanoのトランザクションコストの決定性についての詳細は、こちらをご覧ください。
前方決定性を持たないブロックチェーンでは、ユーザーはトランザクションに支払うべきガス料金がいくらになるかを知ることができず、過剰支払いという結果となります。前方決定性の欠如はまた、そのようなブロックチェーンでトランザクションが失敗してもガスを大量に消費するというリスクが存在する理由でもあります。
前方決定性の力
前方決定性はさまざまな理由からCardanoのパワフルな特徴となっています。
ユーザーは前もってトランザクションが何をするかわかるため、驚くようなことはない。これは、ユーザーが以下を正確に知るため、特にスクリプトに関連する
- スクリプトがどのように作動するか
- 実行バジェットがいくら必要か
提案されたトランザクションを安全に並行して処理できる。この並列性は、Hydraのスピードの理由の1つ
- ユーザーはトランザクションが失敗するか否かを前もって知ることができるため、スクリプトの失敗を厳しく処罰できる(ユーザーに悪意がなければ起こりえないため)
- 大まかに言えば、ブロックチェーンとのやり取りや進化がより簡単で予測可能になる
トランザクションの前方決定性には、スクリプトの実行を含むトランザクション検証のすべての部分が完全な決定性を持つ必要があります。これが、Cardanoがスクリプトの非決定性操作を許せない最終的な理由となります。
前方決定性を得る方法の1つは、トランザクションの効果をトランザクション自身とそれが参照するアウトプットのみによって決定するようにすることです。Cardanoのコンテクストでは、これをローカリティと呼びます。トランザクションを見るだけで誰でもトランザクションが何をするかがわかるようになるため、ローカリティもユーザーにとって大きな利益となります。
本ブログ記事のパート2では、Plutus、Marlowe、Hydraを使ったCardanoの時間処理のユースケースを説明します。
最新の記事
Hydra Doom Tournament 筆者: Fernando Sanchez
22 November 2024
Quality Engineering at IO: bridging research and reality in software development 筆者: Ivan Irakoze
20 November 2024
ブラックホーク空へ:ハリケーン「へリーン」を受けて英雄達を輸送 筆者: Fernando Sanchez
29 October 2024