ブロックチェーン環境においてグローバルなコンセンサスを確保するためには、オンチェーンタイムキーピングが不可欠です。この記事では、カルダノで時間がどのように扱われているかを説明します。
以下はIOGブログに掲載された記事「Time handling on Cardano, part 1. About Ouroboros and the importance of determinism」を翻訳したものです。
カルダノでの時間の使い方【第一部】Ouroborosについて、そして決定論の重要性
by Arnaud Bailly 2022年12月7日
このブログ記事は、Arnaud Bailly, Michael Peyton Jones, Sebastian Nagel, Polina Vinogradova, and Brian Bushによる共同作業で作成されました。
時間は、ブロックチェーン・システムのすべての参加者にとって必然的に相対的であり、Ouroboros合意プロトコルの安全性をサポートし維持するために非常に重要です。ミンテッド・ブロック(ブロック生成)は、システム内のすべてのノードにタイムリーに伝搬されることが期待されているため、コンセンサスを得るためには、グローバルに受け入れられる表現を構築することが必要です。
Ouroborosによる時間処理
ローカルでは、ノードは「wall-clock」システムを使って時間の経過を計算します。この時計のコードは複雑で、ハードフォークの境界でスロットの長さが変わることがあるため、これを考慮して慎重に時間を計算する必要があります。
コードはcurrentSlotを取得するために4つのステップを実行します。
- 次のスロットまでの残り時間、または現在のスロットが不明な場合は任意の60秒の遅延に相当する遅延を待ちます(これは同期時に発生します)。
- 現在のシステム時刻を取得し、それを現在の時代のスロット長に応じたスロット番号に変換します。
- 新しいスロットが前のスロットより大きい場合、新しい現在のスロットを’tick’します。
- 上記が真でない場合、もう少し待つか、現在の時刻があまりにも昔にジャンプした場合はエラーを報告します。
ローカルのcurrentSlotは、ノードの台帳の先端から報告されたスロットと比較されます。もし後者の方が古ければ、それは無視されます。これは、ノードがチェーンと状態を同期していることを意味するからです。
スロットの長さはハードフォークで変わる可能性があるため、コンセンサスがスロットを時間に変換できるのは、ハードフォークが起こらない将来の固定点-「stability window」-まででです。実際には、stability windowは取引の最終性とチェーン状態の不変性を保証するために必要な時間の尺度を提供するため、不可欠である。stability windowの間、ネットワークは少なくともk個のブロックを生成しなければならない。stability windowは最大3k/fまでかかる。これは現在のパラメータでは36時間、つまりおよそ1日である。
現在の課題
情報の伝達速度には、光速という基本的な物理的制限があります。このため、ネットワーク上のノードの時刻を同期させるには時間がかかります。
ネットワークタイムプロトコル(NTP)は、時間制限と計測の違いに対応した同期メカニズムを提供するために存在します。一方、NTPは単調な増加を保証するものではありません。時間は時に数秒、あるいは数時間単位で前後に飛ぶことがあります。世界規模で正確で精密、かつ信頼性の高い時計を提供する既存のシステムは、例えばSpannerが提供するグローバルクロックのように中央集権的なものです。
現在、カルダノでは、
- ネットワークパラメータは、チェーン上で観測可能な時間間隔(例:ブロック時間)の粒度が20sとなるように設定されており、これはスロット長(1s)をブロック係数f(予想されるブロック頻度、0.05)で割ったものと同じである。これらのパラメータは、短期的には将来も変わることはないだろう。
- この20秒は、ネットワーク上で新しいトランザクションとブロックを複製するための制約(地球全体で300msのTCP遅延、数千のノード)を考慮し、プロトコルの安全性を保証する最適な予算として決定された。ブロックのスループットは将来的に向上するかもしれないが、それによって観測可能なオンチェーン時間の粒度が小さくなることはないだろう。
- Ouroborosのコンセンサス設計によれば、取引の最終化は約1日で達成され、1日未満では起こり得ない。数分から数時間で、すでに高い信頼性に達していますが、ブロックが最終的に廃棄される確率は、その深さとこのブロックを採用しなければならないノード数に比例して指数関数的に減少することに注意してください。
最後に、長期的には、現在のOuroborosプロトコルは、Ouroboros Chronosに置き換えることが計画されています。Ouroboros Chronosは、ブロックチェーン技術に基づく初の高耐久性暗号時間ソースを提供することで、時間管理の課題に取り組みます。
ブロックチェーン環境における決定論の重要性
現在の文脈では、決定論とは、ある取引が台帳の状態に対して「固定的な効果」を持つことを意味します。しかし、歴史的決定論と将来的決定論の概念を区別することが重要です。
ブロックチェーンは、決まった一連の取引(ブロックにまとめられる)を複製して、世界の状態についてコンセンサスを得るという原理に基づいています。すべてのブロックチェーンは履歴的決定論を持っています。つまり、チェーン内の取引は一定の効果を持ち、そうでなければチェーンを検証した結果は非決定論的となり、コンセンサスが崩れてしまうのです。
しかし、まだチェーンに追加されていない取引は固定的な効果を持つ(または適用されない)という意味のprospective(プロスペクティブ:予想される)決定論を持つブロックチェーンはほとんどありません。カルダノはprospective determinismを備えています(現在のところポインタアドレスは例外ですが、このCIPで削除されることが提案されています)。また、Cardanoの取引コスト決定論については、こちらで詳しく解説しています。
prospective determinismを持たないブロックチェーンでは、ユーザーは取引に必要なガス代を知ることができず、その結果、そのようなユーザーは取引に過剰にお金を支払うことになります。また、prospective determinismがないため、そのようなブロックチェーン上の取引は失敗する可能性があり、また多くのガスを消費するリスクが存在します。
prospective determinismの威力
prospective determinismは、複数の理由から、カルダノの非常に強力な機能です。
- ユーザーは、トランザクションが何を行うかを事前に知ることができるので、サプライズがありません。これは特にスクリプトに関係することで、ユーザーは正確に知っているからです。
○スクリプトがどのように動作するか、そして
○実行予算がどれくらい必要なのか。
- 提案されたトランザクションは、安全に並列処理することができる。この並列処理がHydraの速さの理由の1つです。
- ユーザはトランザクションが失敗するかどうかをあらかじめ知っているので、スクリプトの失敗は厳しく罰することができます(悪意のないユーザには決して起こらないからです)。
- 大まかに言えば、ブロックチェーンとの対話、ブロックチェーンの進化をより簡単に、より予測しやすくします。
トランザクションのprospective決定論は、スクリプトの実行を含むトランザクション検証のすべての部分が完全に決定論的であることを必要とします。カルダノがスクリプトで非決定論的な操作を行えないのは、究極的にはこのためです。
将来的決定論を得る方法の一つは、トランザクションの効果をトランザクション自身とそれが参照する出力によって完全に決定するようにすることです。カルダノの文脈では、これをローカリティと呼ぶ。局所性は、トランザクションを見るだけで、そのトランザクションが何をするのか誰でも知ることができることを意味するので、ユーザーにとっても大きな利点があります。
このブログ記事の第2部では、Plutus、Marlowe、Hydraを使ったCardanoでの時間処理のユースケースについて説明する予定です。