この記事は IOHK ブログ《Cardano: robust, resilient – and flexible》から翻訳されたもので、著者は:Kevin Hammondで、ソフトウェアエンジニアです。2021 年 10 月 21 日。
導入:Cardano ブロックチェーン上の NFT プロジェクトは急成長していますが、一方で NFT の作成プロセスが短期間に大量の取引を処理する必要があるため、Cardano には明らかなネットワーク混雑の問題が発生しています。IOHK のこの記事では、アーキテクチャ設計とパラメータ設定の観点から、これらの問題が発生する理由を説明し、短期および中長期の可能な解決策を簡単に説明します。
Cardano の設計目標は、世界規模で分散型の方法で数億人のユーザーにサービスを提供することです。他の分散型ブロックチェーンと同様に、これは安定して持続的に期待通りの新しいブロックを生成する必要があることを意味します。これらのブロックは、ユーザー間の取引を透明な方法で記録し、結合することでブロックチェーンが成長し続けます。新しいブロックが効率的かつ安全な方法でネットワーク全体に伝播されることを保証するために、システム全体は計算、メモリ、ストレージ、ネットワークリソースの消費において十分な効率を達成する必要があります。
柔軟性はこの中で重要な要素であり、したがって Cardano プロトコルの重要な特徴の一つは、そのアーキテクチャ設計が真のスケーラビリティを十分に考慮していることです。これは、Cardano を真のグローバルで完全に分散型のオペレーティングシステムにするという長期的な目標を達成するためだけでなく、価格変動、ネットワークの飽和、需要の増加などの状況に柔軟に対応することを目的としたパラメータ化されたアプローチを採用しています。Cardano は、システムの動作を調整するためにハードフォークなしで実現できるいくつかのプロトコルパラメータを提供しています。それでも、実際により大きなアップグレードが必要な場合は、ハードフォークコンビネーター(HFC/hard fork combinator)技術を使用して実現することも可能です。これらの特徴が組み合わさることで、Cardano は既存の他のブロックチェーンとは異なる差別化要素となり、今日の Cardano は非常に堅牢で信頼性が高く、高度にアジャイルなアップグレードパスを持ち、ネットワークの成長や使用状況の変化に柔軟に対応できるようになっています。
Cardano のロードマップ設計は一連の段階に分かれており、最終目標に向かって一歩一歩進むことができます。Byron 段階の目標は、連合ネットワーク形式で基本的な取引機能を実現することです。これにより、コミュニティを構築し、関係を築きながら次の段階に進むことができます。Byron の再起動は、さらなる機能開発のための堅固な基盤を築き、Shelley 段階ではステーキングプールが導入され、コミュニティの規模がさらに拡大し、100% の完全な分散型のブロック生成の旅が始まりました。
今年、Cardano は期待されていたいくつかの新機能を導入しました。2021 年初頭以来、Mary 世代の到来により、Cardano は帳簿上で他の資産トークンや非同質トークン(NFT)を作成することをサポートしています。Cardano の手数料は非常に低く、トークンの作成にはスマートコントラクトが不要なため、Cardano NFT は爆発的な成長を見せています。9 月に入ると、Alonzo アップグレードにより Cardano は Plutus スマートコントラクトのサポートを開始し、多様な分散型アプリケーション(DApp)を実行できるようになりました。現在、Cardano のスマートコントラクトはまだかなり初期の段階ですが、すでに数十のプロジェクトが DApp を開発中で、いくつかのプロジェクトはすでにデプロイ可能な状態に近づいています。関連する開発活動はすぐにさらに加速するでしょう。これらの新機能は、Cardano の帳簿が新しいスクリプトや取引を処理する方法に影響を与え、同時に利用可能なリソースに新たな需要を生じさせます。取引活動が増加するにつれて、Cardano のアーキテクチャは需要に敏捷に対応し、適応することをサポートします。
ネットワーク容量#
ネットワーク接続は Cardano の運用の核心です。Cardano ネットワークは、世界中に分散したノードに取引とブロックデータを配信し、これらのノードはブロックチェーンを生成し、検証する役割を果たします。このプロセスはデータ拡散(data diffusion)と呼ばれ、この必須プロセスはノードに必要な情報を提供し、合意アルゴリズムが正しい決定を下すことを保証します。これらの決定はブロックチェーンを前進させることができ、ノード間の合意はすべての取引が検証され、確認され、新しいブロックに公開透明に組み込まれることを保証します。
Cardano の合意プロトコルは分散型のOuroboros Praosです。プロトコルのパラメータ dに対して一連の変更を実施することで、Cardano は以前の連合型 Ouroboros Classic プロトコルから Praos プロトコルに移行しました。Ouroboros Praos の安全性は高く保証されており、その基盤は多くのトップネットワークセキュリティおよび暗号技術の会議やジャーナルで査読された研究論文に基づいています。
ネットワークの性能はシステム全体の動作速度に影響を与えます。これには以下の指標が含まれます:
- スループット(転送されるデータ量)
- タイムリー性(ブロックに組み込まれる時間)
これら 2 つの要求は相反するものです。生成されたブロックを最も効率的に使用できる場合、スループットを最大限に向上させることができます。逆に、これは遅延を隠すための十分なバッファが必要であり、これが世界的に分散されたシステムの不便を緩和します。
より多くのバッファは通常、ブロック(およびネットワーク)をより良く使用できることを意味しますが、その代償として、システムが過度に飽和した場合、遅延(つまりチェーンに組み込まれる時間)が長くなることがあります。
ブロック予算#
Cardano が取引やスクリプトを実行する速度を理解するためには、まずブロック予算(block budget)の概念を定義する必要があります。Cardano のブロックサイズは現在最大 64KB に制限されており、このパラメータは優れたネットワーク利用率と可能な限り小さな取引遅延のバランスを考慮して設計されています。単一のブロックには、Plutus スクリプトを使用した取引(スマートコントラクト)、ネイティブトークン、メタデータ、基本的な ADA 取引(支払い)など、さまざまな取引が含まれる可能性があります。同様に、現在単一取引のサイズは最大 16KB に制限されています。これにより、単一のブロックには常に複数の取引(少なくとも 4 つ、通常はそれ以上)が含まれ、全体の取引スループットが向上します。
ブロック時間予算も重要な属性であり、これは単一のブロック内のすべての取引を処理するために利用可能な時間を指し、この時間の長さは固定されています。これは Plutus スクリプトを実行するための時間と、他の取引を実行するための時間に分かれています。この属性により、Plutus スクリプトを使用する取引がすべての利用可能な時間予算を独占することがないため、システムは常に Plutus スクリプトを含むブロック内で基本的な支払いを処理できます。各ブロックを生成するための総時間予算(ネットワーク接続コストを含む)は 1 秒に設定されており、Plutus スクリプトを実行するための利用可能な時間予算は約 50 ミリ秒です。実際には、このパラメータはかなり緩やかであり、ベンチマークテストでは、参照システム上で多くの実際のスクリプトの実行時間が 1 ミリ秒未満であることが示されています。
ブロック時間予算は現在 1 秒に設定されています。安全性の観点から、Praos 合意プロトコルは、チェーンに追加される可能性のあるブロックの中から一部(20 分の 1)を選択します。したがって、現在のプロトコルパラメータの下で、最大取引スループット(単純取引)は約毎秒 11 取引(11 TPS)です。明らかに、異なる取引のデータ量は異なり、異なるペイロードを持っています。例えば、単一の取引は、数百万ドルの資産の価値を移転する Catalyst 投票の全ラウンドを最終的に確定することができます。
前述のように、各ブロックにはユーザーがウォレットやコマンドラインツール(CLI)などを通じて提出した多くの取引が含まれています。これらの取引は、一時的なメモリホスティングエリア(すなわち mempool / メモリプール)に保存され、処理されてブロックに組み込まれるまで待機します。ブロックが生成されると、未処理の取引はメモリプールから削除され、新しい取引がメモリプールに追加されます。固定サイズのメモリプールを使用することで、需要が高いときにネットワークが過負荷になるのを避けることができますが、これによりウォレットやアプリが取引を再提出する必要がある場合もあります。現在、メモリプールのサイズは 128KB に設定されています:つまり、現在のブロックサイズの 2 倍です。このパラメータはキューイングモデル(queuing model)に基づいて選択されています。
ネットワークの拡張性#
Ouroboros の設計目標は、大量のデータや異なる複雑さとサイズの取引やスクリプトを処理する能力を持つことです。現時点では、現在のパラメータを使用して、Cardano ネットワークは平均して約 25% の容量しか使用できません。もちろん、最も効率的な状況では Cardano の容量はほぼ 100% 使用される(つまりネットワークが飽和する)ことになります。このような状況では、多くのネットワーク接続ソリューションが問題を抱える可能性がありますが、Ouroboros と Cardano ネットワークの構造設計は、深刻な飽和状態に公平かつ高い弾力性で対応できるようになっています。ベンチマーク分析によれば、200% の飽和度でも Cardano の全体的な性能は依然として弾力性があり、ネットワーク障害の問題は発生しません。44 倍のストレステストでも、全体的な利用可能なネットワーク容量には問題が発生しませんでした(ただし、一部の取引には若干の遅延が生じる可能性があります)。Cardano ネットワークの動作モードはこのように設計されており、バックプレッシャー(backpressure)メカニズムを使用して全体のシステム負荷を管理します。したがって、例えば、特定のユーザーが大規模な NFT プロジェクトの発行に参加する際に、取引時間が長くなる可能性があるか、または大量の取引の中で特定の取引を再提出する必要がある場合(または NFT 発行プロセスが長引く可能性がある)としても、これはネットワークが「崩壊した」ことを意味するわけではありません。これは実際には Cardano ネットワークのパフォーマンスが期待通りであることを示しています。これを「優雅な降下」と呼び、ネットワーク設計に関するこの論文を参照してください。
ウォレット#
ウォレットの役割は、最終ユーザーを代表してブロックチェーンに支払いおよびその他の取引を提出することです。また、ブロックチェーンの状態を追跡するためにも使用されます。ウォレットは、ユーザーを代表して取引を提出し、取引がブロックチェーンに受け入れられたことを確認し、提出が成功しなかった場合は再試行するという重要なコアサービスを提供します。つまり、ウォレットはネットワークの飽和時のバックプレッシャーの影響や、他のネットワークの問題(例えば、一時的な接続の切断や可能なチェーン分岐など)を考慮する必要があります。ウォレットは 2 種類に分かれます:
- フルノードウォレット(例:Daedalus)は、ローカルの計算およびネットワークリソースを使用して Cardano ネットワークに直接接続されたノードを実行します。
- ライトウォレット:共有された計算およびネットワークリソースを使用して、大量の最終ユーザーにサービスを提供します。
ネットワークの需要が高いとき(例えば NFT の発売時)、これら 2 種類のウォレットは取引を再試行する必要があるかもしれません。ライトウォレットは多くのユーザーとリソースを共有するため、一時的に利用可能な計算およびネットワークリソースを拡張する必要があるかもしれません(サービスエンドポイントの複製を含む)、これによりユーザーの需要を満たすことができます。このようなオンデマンドの拡張は、企業が人気のある新製品を発売する際に一時的に需要を満たす必要があるのと似ています。相対的に、フルノードウォレットは根本的な影響を受けないかもしれません。取引には遅延が生じる可能性がありますが、各ウォレットには取引を再試行するための専用リソースがあり、自身のネットワーク接続を持っています。同様の原則は DApp プロバイダーにも適用されます —— 特定のネットワークエンドポイントを提供する際には、需要を満たすためにシステムリソースを拡張する必要があります。
プロセスの最適化#
私たちは NFT コミュニティで起こっている革新(および交流)を自然に歓迎します。ユーザーエクスペリエンスを向上させるために、NFT などの作成プロセスを最適化し、システムが飽和しているときでも効果的に機能するようにする必要があります。例えば、多くの NFT 作成者は、バッチ処理を使用して NFT を作成することで、効率を高めています。
私たちはまた、NFT クリエイターがプロセスを最適化し、ネットワークの混雑をできるだけ減らすことを奨励しています。私たちは皆さんがクリエイターコミュニティのDiscordの議論に参加することを望んでおり、私たちのエンジニアが特定のケースに最適なソリューションを見つける手助けをします。
パラメータ調整によって提供される柔軟性(必要に応じて 1 エポック内で実現可能)に加えて、中長期的にはさらに進んだ選択肢もあります。Hydraは Cardano が複数の操作を並行して実行できるようにし、より強力なスケーラビリティを実現します。state-channel ソリューションは、システムのスループットを向上させ、チェーン上での実行の需要を減少させることができます。しかし、Hydra には複数のスケーラビリティユースケースがありますが、NFT 作成の効率問題を特に解決するものではありません。Cardano が成熟し発展し続ける中で、私たちはネットワークを最適化し、ネットワーク容量を管理するために引き続き努力します。最近の10 月の中間更新で述べたように、Cardano の運用容量が増加するにつれて、Cardano のパラメータを需要に応じて調整することができます。例えば、ブロック時間予算を減少させたり、Plutus スクリプトのサイズや実行時間を最適化したり、その実行コストを削減したり、スループットを向上させたりすることができます。