以下はIOGブログに掲載された記事「Cardano: robust, resilient – and flexible」を翻訳したものです。
カルダノ:堅牢性、回復力、そして柔軟性
モジュール化されたパラメータベースのアプローチにより、カルダノは真のスケーラビリティを念頭に置いて設計されています。
By Kevin Hammond Software Engineer 2021年10月21日
カルダノは、何百万人ものユーザーにグローバルに分散してサービスを提供するように設計されています。これは、他の分散型ブロックチェーンと同様に、チェーンをまとめて成長させ、ユーザー間の取引を透過的に記録する新しいブロックを、予測可能かつ一貫して供給する必要があることを意味しています。新しいブロックを効果的かつ安全にネットワーク全体に伝搬させるためには、システムが計算、メモリ、ストレージ、ネットワークのリソースを効率的に消費することが重要です。
柔軟性が重要なので、カルダノプロトコルの重要な特徴は、真のスケーラビリティを念頭に置いて設計されていることです。これは、真のグローバルな完全分散型OSにインフラを提供するための長期的な能力だけではなく、パラメータ化のアプローチは、価格変動、ネットワークの飽和、需要の増加などに柔軟に対応できるように設計されています。数多くのプロトコルパラメータが用意されており、ハードフォークを行わなくてもシステムの動作を調整することができます。また、ハードフォークを必要とするような大幅なアップグレードの場合でも、当社のハードフォークコンビネーター技術(HFC)を用いて巧みに管理することができます。これらを組み合わせることで、現在の堅牢性と信頼性、そしてネットワークの成長や使用状況の変化に応じた機動的なアップグレードパスを提供する、カルダノの重要な差別化要因となっています。
また、カルダノのロードマップは、最終目的地に向かって一歩一歩進むための一連のステージで考えられている。バイロンは、フェデレートされたネットワーク内での基本的なトランザクション機能についてでした。これにより、次のステージに取り組む一方で、コミュニティやパートナーシップの構築を開始することができました。Byronの再起動により、さらなる機能を構築するための強固な基盤ができました。一方、Shelleyでは、ステークプールを導入し、コミュニティをさらに拡大し、100%分散型のブロック生産を導入しました。
今年は、待望の新機能を多数導入しました。2021年初頭のメアリー時代から、カルダノはマルチアセットとノンファンジブルトークン(NFT)の作成を台帳上でサポートしています。低い手数料とスマートコントラクトの必要性がないため、このエキサイティングな分野で爆発的な動きが見られます。9月のAlonzoのアップグレードでは、幅広い分散型アプリケーション(DApps)の開発を可能にするPlutusスマートコントラクトがサポートされました。スマートコントラクトはまだ始まったばかりですが、DAppsに取り組んでいる数十のプロジェクトがあり、多くのプロジェクトが展開段階に近づいていることから、事態はまもなく加速し始めるでしょう。これらの新しい機能は、台帳が新しいスクリプトやトランザクションを処理する方法に影響を与え、利用可能なリソースに新たな需要をもたらします。活動が活発になるにつれ、私たちのアーキテクチャは、必要に応じて柔軟に適応できるようになります。
ネットワーク容量
ネットワークは、Cardanoのすべてのオペレーションの中心にあります。カルダノのネットワークは、ブロックチェーンを生成・検証するグローバルに分散したノードにトランザクションとブロックを分配します。これはデータ拡散と呼ばれ、コンセンサスアルゴリズムが決定を下すために必要な情報をノードに提供することが不可欠である。これらの決定はチェーンを前進させます。ノード間のコンセンサスは、すべてのトランザクションが検証され、有効であることを保証し、その結果、新しいブロックに透過的に含まれることができるからです。
カルダノは、分散型コンセンサスプロトコル「Ouroboros Praos」を採用しています。カルダノは、プロトコルのパラメータdを変更することで、従来のOuroboros ClassicプロトコルからPraosにスムーズに移行しました。Ouroboros Praosは、強化されたセキュリティ保証を確立しており、一流のサイバーセキュリティや暗号技術の会議やジャーナルで発表された査読付きの研究論文によって提供されています。
ネットワークのパフォーマンスは、システム全体の動作速度に影響を与えます。これには、以下のような指標が含まれます。
- スループット(データの転送量)
- タイムリー性(ブロック採用時間)
この2つの要件は、お互いに緊張関係にあります。スループットを最大化できるのは、生成されたブロックが最も効率的に使用されるときです。そのためには、レイテンシーを隠すための十分なバッファリングが必要であり、これはグローバルな分散システムの結果を緩和することになります。
バッファリングを増やすと、ブロック(およびネットワーク)の利用率が向上することがよくありますが、システムが大きく飽和している場合には、遅延(チェーンに採用されるまでの時間)が増加するという代償を伴います。
ブロックバジェット
カルダノでの取引やスクリプトの実行速度を理解するためには、まずブロックバジェットという概念を定義する必要があります。ブロック全体のサイズは現在最大64KBに制限されており、これはネットワークの利用効率の良さとトランザクションのレイテンシーの最小化のバランスを表しています。1つのブロックには、Plutusスクリプト(スマートコントラクト)、ネイティブトークン、メタデータ、シンプルなADAトランザクション(ペイメント)などのトランザクションが混在している可能性があります。同様に、1つのトランザクションは、現在、最大16KBに制限されています。これにより、1つのブロックには必ず複数のトランザクション(最低でも4つ、一般的にはそれ以上)が含まれることになり、トランザクション全体のスループットが向上します。
ブロックタイムバジェットは、1つのブロックに含まれるすべてのトランザクションを処理するために利用できる一定の時間です。この時間は、Plutusスクリプトの実行に使用できる時間と、他のトランザクションの実行に使用できる時間に分けられます。この特性により、Plutusスクリプトを含むトランザクションが利用可能な時間バジェットを独占することができず、Plutusスクリプトを含む同じブロック内でシステムが単純な支払いを処理することが常に可能となります。各ブロックを生成するための総時間バジェット(ネットワークコストを含む)は1秒に設定されており、Plutusスクリプトの実行には約50ミリ秒のバジェットが用意されています。実際には、これは寛大な予算であり、ベンチマークでは、多くの実際のスクリプトが参照システム上で1ミリ秒以下で実行されることが示されています。
現在、ブロックタイムバジェットは1秒に設定されています。セキュリティ上の理由から、Praosのコンセンサスプロトコルは、チェーンに追加される可能性のあるブロックのごく一部(20個に1個)のみを選択します。現在のプロトコルのパラメータでは、(単純な取引の場合)最大取引スループットは約11トランザクション/秒(TPS)です。当然のことながら、トランザクションのサイズは様々で、有効なペイロードも異なります。例えば、1つの取引でCatalystの投票ラウンド全体を終了させ、数百万ドルの価値を送金することができます。
上述のとおり、各ブロックには、エンドユーザーがウォレットやコマンドライン・インターフェース(CLI)などから送信した多数のトランザクションが含まれています。これらのトランザクションは、処理されてブロックに含まれる準備が整うまで、一時的にメモリ内の保持領域(mempool)に保管されます。保留中のトランザクションは、ブロックが作成されるとmempoolから削除され、新しいトランザクションがmempoolに追加されます。固定サイズのmempoolを使用することで、需要が高い時期にノードが過負荷になる可能性を回避できますが、これはウォレットやアプリケーションがトランザクションを再提出する必要があることを意味します。現在、メムプールのサイズは、現在のブロックサイズの2倍である128KBに設定されています。これは、キューイングモデルに基づいて選択されています。
ネットワークの拡張
Ouroborosは、大量のデータに加えて、さまざまな複雑さや大きさのトランザクションやスクリプトを扱うように設計されています。現在のパラメータでは、カルダノネットワークは平均して容量の25%程度しか利用していません。もちろん、最も効率的なシナリオは、カルダノがその容量の100%もしくはそれに近い状態で稼働している(ネットワークが飽和している)ことです。しかし、OuroborosとCardanoのネットワークスタックは、このような状況下でも公平で高い回復力を発揮するように設計されています。ベンチマーク分析によると、200%の飽和状態でも全体的なパフォーマンスは回復しており、ネットワーク障害も発生していません。44倍のストレステストでも、利用可能なネットワーク容量の合計で障害は発生しませんでした(ただし、一部のトランザクションが若干遅れることがあります)。ネットワークは、バックプレッシャーを利用してシステム全体の負荷を管理するように設計されています。そのため、例えば、大規模なNFTドロップに参加している個々のユーザーの中には、トランザクションの待ち時間が長くなったり、大規模なバッチから時々トランザクションを再送信する必要があったりする場合がありますが、これはネットワークが「苦労している」ことを意味しません。これは、ネットワークが意図したとおりに動作していることを意味します。私たちはこれを「graceful degradation」と呼んでいますが、その詳細については、ネットワークデザインペーパーをご覧ください。
ウォレット
ウォレットは、エンドユーザーに代わって、支払いやその他のトランザクションをブロックチェーンに送信したり、ブロックチェーンの状態を追跡したりする役割を果たします。ウォレットが提供する主要なサービスの1つは、ユーザーに代わってトランザクションを送信し、それがブロックチェーンに受け入れられたことを確認し、送信が成功しなかった場合はユーザーに代わってトランザクションを再試行することです。つまり、ウォレットは、ネットワークが飽和状態になったときの背圧の影響や、その他のネットワークの影響(一時的な切断、チェーンフォークの可能性など)を考慮しなければなりません。ウォレットは以下のいずれかになります。
- フルノードウォレット(Daedalusなど):ローカルのコンピューティングとネットワークリソースを使用して、Cardanoネットワークに直接接続するノードを実行します。
- ライトウォレット:これとは対照的に、共有のコンピューティングとネットワークリソースを使用して、多数のエンドユーザーにサービスを提供します。
需要が高い時期(例:NFTセール)には、どちらのタイプのウォレットも取引を再試行する必要があるかもしれません。ライトウォレットは、多くのユーザー間でリソースを共有しているため、ユーザーの需要を確実に満たすために、利用可能なコンピューティングおよびネットワークリソース(エンドポイントの複製を含む)を一時的に拡張する必要がある場合があります。このデマンドスケーリングは、例えば企業が人気のある新製品をリリースする際に課せられる要件に似ています。一方、フルノードのウォレットは基本的に影響を受けないことがあります。トランザクションは若干遅れるかもしれませんが、各ウォレットは、独自のネットワーク接続など、送信を再試行するために必要な専用リソースを持っています。同様の原則がDAppプロバイダーにも当てはまります。特定のネットワークエンドポイントが提供されている場合、システムリソースは需要に応じて拡張されるべきです。
プロセスの最適化
私たちは、現在NFTコミュニティで見られる革新(および対話)を当然歓迎します。ユーザーエクスペリエンスを向上させるためには、例えばNFTの作成プロセスがシステム飽和を起こしても正常に動作するように、開発手順を最適化する必要があります。例えば、多くのNFT開発者は、効率化のためにバッチミントを採用しています。
クリエイターの皆様には、ネットワークの混雑を最小限に抑えるために、今後も最適化を検討していただきたいと思います。また、クリエイターコミュニティの一環として、Discordでの議論にも参加していただきたいと思っています。私たちは、特定のケースにベストマッチするソリューションを見つけるために、エンジニアを活用しています。
必要に応じてエポック内でパラメータを調整できる柔軟性に加えて、中長期的にはさらなるオプションが登場します。Hydraは、複数のオペレーションを並行して行うことで、拡張性を高めています。また、ステートチャネルソリューションにより、システムのスループットが向上し、オンチェーン実行の需要も減少します。しかし、Hydraは複数のスケーラビリティのユースケースに役立つものの、NFTの生成効率には特に対応していません。Cardanoが成熟し成長し続ける中で、私たちはネットワークの最適化とネットワーク容量の管理方法を検討し続けます。先日、10月の中旬のアップデートでお話したように、ネットワークがより高いキャパシティで稼働し始めると、必要に応じてそれらのCardanoのパラメータを調整できるようになります。例えば、ブロックタイムバジェットを減らしたり、Plutusスクリプトのサイズと実行時間を最適化したり、実行コストを下げてスループットを向上させたりすることができます。
今すぐDiscordコミュニティに参加して、より詳しい情報を得たり、献身的なコミュニティとCardanoに関するあらゆることを話し合ったりしましょう。
この記事を書くにあたり、Neil Davies氏とOlga Hryniuk氏には追加の貢献とサポートをしていただきました。