Hydra: Cardanoのスケーラビリティソリューション

  • 2021.06.16
  • 2021.08.23
  • ADA
Hydra: Cardanoのスケーラビリティソリューション

本記事は、以下のHydraの英語記事を翻訳した記事になります。

Cryptocurrencies came to the world to become an alternative to the current finan…
cardanians-io.medium.com

全てを読むのは大変だと思うので、要約だけでも読んでみて、なんとなくすごいことをやっているという雰囲気だけでも感じていただけたらと思います。

要約

Hydraは、暗号通貨のさらなる普及に絶対に欠かせません。なぜなら、取引の決済に長い時間を待たなければならないことになります。トランザクションの送信だけでなく、スマートコントラクトの実行をすることも可能です。さらに、UTxOを直接使用しているため、競合他社に比べてすべてが非常に安全です。

Visaのネットワークでは、毎日平均1億5000万件の取引が処理されています。これは1秒間に約2,000件(TPS)のトランザクションを処理していることになります。
現在のブロックチェーンネットワークではPoWネットワークの通常のスループットは数十TPSPoSネットワークは数百TPSに達します。

IOHKでの約5年間の学際的な研究努力の後、Hydra論文が発表されました。
Hydraがあれば、Cardanoは本当に現在の法定紙幣の代替となることができます。

すべてのプールは新しいHydraのヘッドを作ることができるので、プールを増やせばヘッドを増やせることになります。それぞれのHydraヘッドは約1000TPSを処理でき、1000個のプールがあれば、理論的にはCardanoは100万TPSまでスケールアップすることができ、トランザクションのファイナリティも非常に高速になります

Cardanoは第1層の上に第2層を作ることが可能です。
第1層はブロックチェーンです。これは最も安全で分散型のネットワークで、スループットは低いです。
第2層は可能な限りスケールを大きくし、取引を迅速かつ安価に行えるよう構築されています。
Hydraは、Cardanoの第1層に対する第2層のソリューションになります。

ユーザーは、第2層に資金を移すことができます。第2層の取引は、オフチェーン、つまりブロックチェーンの外側で処理されます。第1層は、第2層で行われる取引を検証しないのです。

コインを第2層に移すことができる特別な仕組みがあります。ここではHydraに移します。より正確に言うと、Hydraの頭が開かれます。
Hydraの頭の中で、当事者は好きなだけ高速トランザクションを交換して直接通信することができます。最後にコインの最終状態が第1層のブロックチェーンに転送されます。
当事者はローカルな状態についてお互いに更新し、全員の間で確認されると、取引履歴を削除することができます。最後に有効だった状態だけがHydraの頭の中で維持され、資金をブロックチェーンに戻す際に使用されます。

Hydraは資金の送金だけでなく、スマートコントラクトの動作することが可能です。スマートコントラクトとは、イベントの発生をきっかけにプログラムの処理が自動で実行することです。

イーサリアムでは、第1層のスマートコントラクトの記述にSolidityを使用しています。第2層ではSolidityを直接扱うことができないため、第2層に移行する際には変換する必要があります。

Hydraでは、両方のレイヤーが同じスクリプトシステムを使用できるため、変換は必要ありません

ステートチャネルでは、トランザクションやスマートコントラクトの並列処理が可能です。たくさんのHydraの頭を開くことができ、それにより多くの取引を処理が可能です。ブロックチェーンへの登録なしにHydraでスマートコントラクトを作成することも可能です。

Hydraを使用することで、ネットワークに新しいステークプールが追加されると、より多くのトランザクションやスマートコントラクトを処理がそれぞれ独立してできるようになるのでパフォーマンスが向上します。

同型のステートチャネルを使用するには、ブロックチェーンの状態の一部を取り出し、Hydraの外で独立して処理し、最後にそれをブロックチェーンにマージして戻せる能力が必要です。UTxOはそれに適しており、オンチェーンの状態とオフチェーンの状態を表現することができます。しかし、従来のBitcoinのUTxOモデルは、スクリプト機能が限られているため、オフチェーンの処理には使いにくいです。
IOHKでは、Extended UTxOモデルとステートマシンを使用することで、スクリプト機能の制限を受けずにレイヤー間の安全な転送が可能になりました。

ステートマシンによってレイヤー間のUTxOの転送は厳密かつ安全に定義されています。特定のUTxOは、ブロックチェーンまたはHydraのヘッドのいずれかで処理されます。両方のレイヤーで同時に処理されることはありません

翻訳全文

暗号通貨は、現在の金融システムに代わるものとして世の中に登場しました。そのため、ユーザーはお店でクレジットカードと同じくらいの速さで支払いができなければなりません。つまり、数秒以内に取引が決済されなければならないのです。Visaのネットワークでは、毎日平均1億5000万件の取引が処理されています。これは1秒間に約2,000件のトランザクションを処理していることになります(TPS)。このようなスループットは、現在のブロックチェーンネットワークでは到達できません。PoWネットワークの通常のスループットは、通常、数十TPSに過ぎません。PoSネットワークは数百TPSに達します。

分散ネットワークは一般的に、深刻なスケーラビリティの制限、低いスループット、システムの状態やトランザクションの履歴を維持するために必要な過剰なストレージに悩まされています。IOHKでの約5年間の学際的な研究努力の後、Hydra論文が発表されました。ネットワーク、マルチパーティ計算、プログラミング言語、コンセンサスの各分野の科学者や研究者が協力して、ブロックチェーンやスマートコントラクトにうまく適合するスケーリングソリューションを考え出さなければなりませんでした。これは大きな科学的成果であり、Cardanoの開発における重要なマイルストーンとなっています。Ouroboros HydraはPoSスケーラビリティの新境地を開拓しました。Hydraがあれば、Cardanoは本当に現在の法定紙幣の代替となることができます。

Hydraは、PoSコンセンサスが使われているCardanoのファーストレイヤーの上にあるセカンドレイヤーのソリューションです。Hydraは、ステーク・プール・モデルに適した方法で設計されています。IOHKチームは、拡張されたUTxOモデルを導入し、台帳自体をシャードする必要なく、ステークスペースをシャードすることができます。元帳レベルでのシャーディングは可能で、Hydraはスケーリングソリューション全体の補完的な役割を果たします。すべてのプールは新しいHydraのヘッドを作ることができるので、プールを増やせばヘッドを増やせることになります。そのため、プロトコルに新しいヘッドを追加することで、ほぼリニアなスケーリングが可能になります。シミュレーションを行ったところ、素晴らしい結果が得られました。それぞれのHydraヘッドは約1000TPSを処理でき、さらに最適化の余地があります。つまり、1000個のプールがあれば、理論的にはCardanoは100万TPSまでスケールアップすることができ、トランザクションのファイナリティも非常に高速になります。Hydraは水平方向のスケーリングを可能にします。それは、追加のノードを組み込むことでパフォーマンスを向上させることを意味します。強力なハードウェアを追加するのは、HWの限界があるので、常に簡単です。

Hydraは、低レイテンシーとノードごとのデータの最小保存量を確保します。また、Hydraはスマートコントラクトを実行することができるので、開発者は簡単にdappsを構築し、マイクロペイメントや投票などを活用することができます。
上に書いたことをすべて理解できなくても問題ありません。ここからは、技術的な詳細について説明します。

ブロックチェーンとHydraの関係とは

第一階層の選択肢は、一定期間に処理されるトランザクション数が常に制限される。分散性を犠牲にしないのであれば、多数の人々が合意の上で分散型ネットワークを利用できるほどのスループットは得られないだろう。その解決策として、第1層の上に第2層を作ることが考えられる。第1層は、ブロックチェーンと呼ばれるものです。これは、最も安全で分散型のネットワークで、スループットは低い。この第1層の上に、準独立型のネットワーク、第2層を作ることが可能です。第2層は、可能な限りスケールを大きくし、取引を迅速かつ安価に行えるよう構築されています。つまりHydraは、Cardanoの第1層に対する第2層のソリューションなのです。

第1層のセキュリティはブロックチェーンと分散型コンセンサスによって確保されているため、取引はオンチェーンで処理されると言います。
ユーザーは、第2層に資金を移すことができます。第2層の取引は、このようにオフチェーン、つまりブロックチェーンの外側で処理されます。つまり、第1層は、第2層で行われる取引を検証しないのです。

それを例で示しましょう。アリス、ボブ、キャロルの3人は、それぞれ10枚のADAコインをブロックチェーンの第1層に持っています。全部で30枚のコインです。コインを第2層に移すことができる特別な仕組みがあります。ここではHydraに移します。より正確に言うと、Hydraの頭が開かれます。Hydraの頭の中では、すべての参加者が取引によってコインを交換します。第1層はこれらの取引を検証しません。Hydraの頭が閉じられると、ブロックチェーンは第2層からの最後の有効なコインの分配を引き継ぐだけです。層間でのコインの授受については後述します。

ブロックチェーンは、Hydra’s headから予想される30ADAのコインがブロックチェーンに戻ってきたことを簡単に確認できます。つまり、Hydra’s headを開いている間にブロックチェーンに転送された量とまったく同じです。コインの所有権は第2層で変化している可能性があり、アリスは20枚のコインを持ち、ボブはCarol 5枚のコインを持っています。利点は、多くのユーザー間の高速な取引が第2層で行われ、ブロックチェーンがそれを直接気にする必要がないことです。

アリス、ボブ、キャロルはADAコインをブロックチェーンからHydraに転送します。Hydraの頭が開かれます。Hydraの頭の中で、当事者は好きなだけ高速トランザクションを交換することができます。最後に、コインの最終状態がブロックチェーンに転送されます。

アリス、ボブ、キャロルの3人は、Hydraの頭の中で直接通信することができます。これは、取引の履歴を忘れることが可能な方法で起こります。当事者はローカルな状態についてお互いに更新し、全員の間で確認されると、取引履歴を削除することができます。最後に有効だった状態だけがHydraの頭の中で維持され、資金をブロックチェーンに戻す際に使用されます。これについても後ほど詳しく説明します。

Hydraのステートチャンネル

Hydraでは、ペイメントチャネルの概念を拡張したステートチャネルを使用しています。当事者は共通の状態を保つためにステートチャネルを維持し、ブロックチェーンとの相互作用なしに合意することができます。

Hydraは、資金の送金だけでなく、スマートコントラクトの実行に関する状態で動作することが可能です。例えば、第1層でスマートコントラクトを作成し、それをHydraの頭の中に転送して実行することが可能です。

スマートコントラクトは、条件付きで実行される特定の操作のプログラムまたはシーケンスと考えることができます。つまり、ある操作は、予想されるイベントが発生した場合にのみ実行されます。そうでない場合は、別の操作が実行される可能性があります。ここでは、スマートコントラクトのイベントの発生をきっかけに処理を実行することについて説明します。スマートコントラクトは任意の瞬間に特定の状態にあり、それがアクティブであり、イベントが変化のトリガーとなる限り、条件付きで徐々に変化していきます。

人々が試合の結果に賭けることができるベッティングオフィスを想像してみてください。スマートコントラクトは、すべての参加者の預金をロックし、試合の結果に応じて賞金を公平に分配することができます。単純化すれば、コントラクトは試合ごとにいくつかの状態になります。

  1. 試合前に参加者の預り金やチップを集める。
  2. 試合開始直前に預託金の受付を停止する。
  3. 試合の結果を待つ。
  4. 試合結果の処理と賞金額の計算。
  5. 勝者への賞金の分配。

スマートコントラクトはHydraで実行することができ、より多くの試合に連続して使用することができます。そのため、ブロックチェーンは賭けに関連するすべての取引を保存することはできません。歴史はHydraでは忘れることができます。試合後に勝利者に賞金が分配された後、すべての状態とトランザクションを削除することができます。もちろん、最終的な状態を除いてですが。スマートコントラクトがサッカーシーズンのために作成されたと仮定しましょう。シーズンが終了すると、Hydraの頭は閉じられ、ブロックチェーンに保存されるのは最終的なファンドのベッターへの分配金だけです。

ステートチャンネルの概念は新しいものではなく、すでにいくつかの既存の実装があります。しかし、それらにはいくつかの重大なデメリットがあります。最大の欠点は、第1層のインフラと、第1層のインフラ用に書かれたスマートコントラクトのコードを、変更せずに第2層で使用することができないことです。層間での資金やスマートコントラクトの移動のために必要なこれらの変更は、非常に危険なものかもしれません。

例えば、ブロックチェーンでは通常、UTxOモデル(Unspent Transaction Output)を使用しています。UTxOは、基本的にコインを抽象化したものです。各UTxOは、デジタル署名の連鎖として実装された所有権の連鎖を表しています。所有者は秘密鍵を使用して、自分のUTxOの所有権を受信者の公開鍵に移すトランザクションに署名します。先に述べたように、簡単にするために、UTxOをコインの表現として想像することができます。コインの所有権は、あなたのアドレスにある財布の中のUTxOの数によって定義されます。

UTxOモデルは、ブロックチェーン内で資金を操作するための非常に安全な方法と考えられています。現在のセカンドレイヤーソリューションは、UTxOと直接連携することはできません。コインは完全に異なる方法で表現されます。現在のセカンドレイヤーは、重要なセキュリティ要素を失っています。情報表現の変換が必要なスマートコントラクトを実行する場合も同様です。そして、それは非常に危険なことです。

Hydraはセカンドレイヤーのソリューションを大幅に簡素化します。Hydraはファーストレイヤーのソリューションを採用することができます。第1層の拡張UTxOモデルとスマートコントラクトインフラ全体をHydra内で使用できます。Hydraのトランザクションは、所有権を変更するためにUTxOと直接連携します。ブロックチェーンに展開されているスマートコントラクトは、Hydraの頭の中でそのまま実行することができ、データ変換はありません。


この違いをより明確に見るために、イーサリアムを見てみましょう。イーサリアムでは、第1層のスマートコントラクトの記述にSolidityを使用しています。第2層ではSolidityを直接扱うことができないため、契約を第2層に移行する際には変換する必要があります。変換を可能にするためには、Solidityのスマートコントラクト自体を適合させる必要があります。ブロックチェーンのスクリプト言語と第2層のスクリプト言語は大きく異なります。そのため、変換が必要なのです

Hydraでは、両方のレイヤーが同じスクリプトシステムを使用できるため、変換は必要ありません。Hydraでは、同型のマルチパーティーステートチャンネルを導入しています。これは基本的に、基礎となる台帳のスクリプト言語がステートチャンネルで使用されることを意味します。HydraはCardanoブロックチェーンからスクリプト言語を継承しています。

ステートチャネルでは、オフチェーンで行われる、トランザクションやスマートコントラクトの並列処理が可能です。より多くのHydraの頭を開くことが可能です。つまり、Hydraは多頭飼いが可能です。新しく開かれたヘッドはすべて、新しいパラレルユニットを表します。状態のチャネルが閉じられると、ヘッドの状態はブロックチェーンにシームレスに吸収することができます。オンチェーンでもオフチェーンでも同じスマートコントラクトコードが使われるので、簡単でわかりやすい作業です。ブロックチェーンへの登録なしにHydraでスマートコントラクトを作成することも可能です。ブロックチェーンはスマートコントラクトを引き継ぎ、オンチェーンで実行を続けることができます。

Hydraの頭が増えた

Hydraのおかげで、Cardanoはほぼ直線的にスケールすることができます。つまり、ネットワークに新しいリソースが追加されると、より多くのトランザクションやスマートコントラクトを処理できるようになります。パフォーマンスが向上します。ブロックチェーンの場合は、必ずしもそうではありません。少なくとも、それほど簡単ではありません。

拡張されたUTxO

Unspent Transaction Output(未使用トランザクションアウトプット)

両方のレイヤーでUTxOモデルを使用することは無料ではなく、両方のレイヤーで準備する必要があります。同型のステートチャネルを使用するには、ブロックチェーンの状態の一部を取り出し、Hydraの外で独立して処理し、最後にそれをブロックチェーンにマージして戻せる能力が必要です。UTxOはそれに適しており、オンチェーンの状態とオフチェーンの状態を表現することができます。しかし、従来のBitcoinのUTxOモデルは、スクリプト機能が限られているため、オフチェーンの処理には使いにくいです。IOHKでは、Extended UTxO(EUTxO)モデルを導入し、一般的なステートマシンをサポートしました(後述)。Extended UTxOモデルとステートマシンにより、スクリプト機能の制限を受けずにレイヤー間の安全な転送が可能になりました。

ブロックチェーンからHydraのヘッドへのUTxOの転送は、複数の当事者によって調整されます。私たちはHydra’s headのオープン化について話しています。ヘッド自体は、第2層のプロトコルの名前です。最初、転送後にはヘッドの初期状態があり、ブロックチェーンとは独立してヘッドプロトコルで進化していきます。当事者はトランザクションを送信したり、スマートコントラクトを実行したりして、共通の状態を集団で維持します。同型性があるため、同じトランザクション検証、ルール、スクリプトの実行をオンチェーンとオフチェーンで使用することができます。

どの当事者も、オフチェーンヘッドプロトコルを終了させたいと思うかもしれません。この場合、パーティは最終的なヘッドの状態をブロックチェーンに戻します。したがって、ブロックチェーンの状態はそれに応じて更新され、最終的なヘッドの状態と一致します。

Hydraはインクリメンタルなコミットとデコミットを可能にします。これは、Hydraのヘッドを閉じたり開き直したりすることなく、UTxOを追加したり削除したりできることを意味します。これは非常に便利なことで、関係者が増える可能性があり、ある参加者が資金を追加または削除する必要があるからといってヘッドを閉じるのは不必要なオーバーヘッドになります。

ステートマシン

ステートマシンという言葉には馴染みがないかもしれません。ステートマシンとは、簡単に言えば、計算機の数学的モデルです。ステートマシンとは、有限個の状態のうち正確に1つの状態をとることができる抽象的な機械です。ステートマシンは、いくつかの入力に応じて、ある状態から別の状態へと変化します。ある状態から別の状態への変化を遷移と呼ぶ。Cardanoの第1層では、常に1つの有効な状態しかなく、次の状態への遷移が決定論的であるため、層間のUTxOの転送が信頼でき、安全であることを確実にするために使用されます。

エレベーターを想像してみてください。エレベーターはドアを開けたり閉めたりすることができます。また、1つ上の階や下の階に移動することもできます。ユーザーはボタンを使うことができますが、これはエレベータにとっての入力です。エレベーターは、ドアが閉まっているのか開いているのか、どの階にいるのかを知っています。これらも入力です。エレベータは、ドアが開いたまま動いてはいけません。中にいる人に危険が及ぶからです。エレベーターは、ドアが閉まっているときだけ上下に動きます。これがステートマシンの機能です。状態から状態への有効な遷移が定義されています。エレベータは状態で動作することができます。ドアが開いている」「ドアが閉じている」「上に移動する」「下に移動する」「アイドル」。状態から状態への有効な遷移は以下の通りです。ドアが閉まっている→上に移動。上の写真の状況を説明しましょう。人がエレベータの中にいます。状態はDoor openです。誰かがボタンを押しました。それはエレベータへの入力で、結果的にドアが閉まりました。ステートマシンは、状態をDoor closeに切り替えます。その後、Move upの状態に移行しても安全です。無効なトランザクションは次のようになります。ドアオープン -> 上へ移動。エレベータのステートマシンは、無効な遷移が決して起こらないようにします。言い換えれば、定義された期待される遷移のみが起こりうることを保証します。少し簡略化しましたが、ご理解いただけましたでしょうか。

Hydraの話に戻りましょう。Hydraのブロックチェーン部分は、2つのことを保証しなければなりません。

  1. UTxOsがHeadに転送される際に、ブロックチェーン内のUTxOsのロックを管理する。ヘッドがアクティブな間は、UTx0はブロックチェーンにロックされたままです。Headが開かれることになったときに起こります。
    2. Headが閉じられることになったときには、最終的なHydraの状態の決済が容易になります。UTxOがブロックチェーンに安全に転送され、デコミットされることを保証します。Headがクローズされるときに起こります。

この2つの機能により、初期のHeadの状態として使われていたUTxOが、最終的なHeadの状態に対応するUTxOに置き換えられることが保証されます。

UTxOは、ヘッドが開くとロックされ、閉じるとアンロックされます。
Hydraのステートマシンには4つの状態がある。初期状態、開放状態、閉鎖状態、そして最終状態です。
ステートマシンについては、これ以上深く考える必要はないでしょう。重要なのは、レイヤー間のUTxOの転送が厳密かつ安全に定義されていることです。特定のUTxOは、ブロックチェーンまたはHydraのヘッドのいずれかで処理されます。両方のレイヤーで同時に処理されることはありません。

ヘッドのプロトコル

どの当事者も、一連の当事者に参加を求めることでHydra’s Headの作成を開始することができます。各パーティは他のすべてのパーティとチャネルを確立します。何らかの理由でそれができない場合、ヘッドの作成は中止されます。当事者は、確立されたチャネルを介して公開鍵の材料を交換します。この公開鍵は、ヘッドに関連したオンチェーン・トランザクションの認証に使用され、ヘッドのメンバーのみが認証を行うことができます。また、この公開鍵は、ヘッド内での複数の署名に基づくイベント確認にも使用されます。

ヘッドのイニシエーターは、ブロックチェーンに初期トランザクションを提出することで、ヘッドを確立します。特別なトークンが作成され、ヘッドのメンバー全員に割り当てられます。これにより、ヘッドメンバーの公開鍵とトークンをリンクさせることができます。この時点で、ステートマシンが関与し、ブロックチェーンからヘッドへの安全なUTxOの転送を行います。最初の状態は「初期状態」です。この時点で、すべてのHeadメンバーはHeadにUTxOをコミットすることができます。もしヘッドのメンバーがコミットトランザクションの送信に失敗すると、状態はInitialからFinalに直接切り替わり、ヘッドはオープンされません。ここで、すべてのメンバーがコミットトランザクションの送信に成功したと仮定します。この場合、ヘッドメンバーがUTxOを使用できるように、UTxOはブロックチェーン内にロックされています。ステートマシンの状態がOpenに切り替わった時点で、ヘッドメンバーはヘッド内でUTxOを使い始めることができます。その時点から、UTxOはオフチェーンで進化し始めます。

ヘッドがオープンになった時点で、任意の当事者がヘッドのクローズを開始することができる。ステートマシンは状態をCloseに切り替えます。争奪期間が設けられ、その間に当事者が最終的な状態(UTxOセット)を提供する。争議期間が経過すると、ステートマシンは状態をFinalに切り替える。最初と同様に、ステートマシンは最終的なHeadの状態に対応するUTxOセットをブロックチェーンに安全に転送する処理を行います。

それでは、Headのトランザクション処理について見てみましょう。Headのプロトコルは非同期で、トランザクションを並行して処理することができます。各当事者は自分の最終的なUTxO状態を維持します。Headプロトコルは、発行された各トランザクションに対する複数の署名を収集し、配布します。トランザクションが確認されると、それは最後の有効なUTxO状態の一部となる。最後の有効なUTxO状態は不可逆であるため、個々のUTxOはすぐに使うことができます。非同期処理のため、当事者の最終的な状態は互いに異なる可能性があります。UTxOは、初期段階から時間とともに進化していきます。各パーティはHeadで確認されたすべての取引を適用するため、最終的な状態は常に変化します。

Headプロトコルでは、パーティのローカルストレージを最小化するために、トランザクションの履歴を保持しません。履歴を保持する代わりに、UTxOスナップショットが常に生成されます。スナップショットリーダーが常に選択され、確認された状態のビューを提供します。他の参加者は署名によってその状態を確認し、その結果、新しいスナップショットが生成されます。非同期のトランザクション処理とは対照的に、スナップショットは逐次的に生成されます。新しいスナップショットが確認されると、当事者は、処理済みで新しいスナップショットの一部であるすべてのトランザクションを削除することができる。パーティの確認された状態は、常に最新の確認されたスナップショットよりも前にあります。したがって、新しいスナップショットの提案を確認できるようにするために、何らかのトランザクションの確認を待つ必要はありません。スナップショットには、ヘッドのメンバー全員が確認したヘッドの最終状態が反映されます。

まとめ

Hydraは、暗号通貨のさらなる普及に絶対に必要なもの、それは高いスケーラビリティを実現します。この機能がなければ、グローバルシステムは基本的に使えません。なぜなら、人々が使い始めようとすると、取引の決済に長い時間を待たなければならないことに気づくからです。また、しばしば追加料金を支払うことになります。Hydraは、ゲームチェンジャーです。トランザクションの送信だけでなく、スマートコントラクトの実行も可能です。さらに、UTxOを直接使用しているため、競合他社に比べてすべてが非常に安全です。

ADAカテゴリの最新記事