序文#
私の仕事では、クロスチェーンプロジェクトのアーキテクチャ設計と実装に関与しています。会社のプロジェクトは Cosmos ブロックチェーンをベースにしているため、私は 1 年以上のプロジェクトで Cosmos SDK を使用していくつかのローレベルチェーンの開発改造を行い、その技術実装についていくつかの理解を得ましたが、開発スケジュールが非常に忙しかったため、Cosmos のアーキテクチャ設計と Tendermint のコンセンサスメカニズムについて体系的な理解を持つことができませんでした。
プロジェクトが終了した後、やっと「ブロックチェーンのアーキテクチャと実装:Cosmos の詳細」を読む時間ができました。この記事は、私自身が Cosmos と Tendermint についての理解とまとめです。
ブロックチェーン技術の発展#
具体的な Cosmos ブロックチェーンに入る前に、ブロックチェーンの発展の経緯と現在の業界で主流のブロックチェーン技術について整理しましょう。
技術の制約#
ブロックチェーンの発展はすでに十数年にわたり、最初のビットコインから一時的に人気を博した EOS、そして後に主流となったイーサリアムなど、それぞれ特徴がありますが、制約もあります。
- ビットコインやイーサリアムなどをベースにした方法は、P2P ネットワーク、暗号学、コンセンサスアルゴリズムなどを実装する必要があるため、比較的高い技術的なハードルがあります。
- PoW(Proof of Work)メカニズムをベースとしたローレベルチェーンは、電力消費(算力)が増えるにつれてリソースと環境に対して友好ではありません。
- チェーン上のアプリケーションの数と規模が増えるにつれて、チェーンのパフォーマンスの制約がますます明確になります。
- ビジネスシナリオの複雑さと要件の増加に伴い、チェーンのコンセンサスアルゴリズムも具体的なシナリオに応じて変化する必要があります。
- 異なるチェーンのローレベルアーキテクチャの差異が大きく、異なるチェーン間の通信が困難であり、クロスチェーン技術の実装も難しい課題です。
技術の発展#
これらの問題を解決するために、業界ではさまざまな技術的な解決策が提案されています。
- リソース消費とトランザクションの問題に対処するために、PoW(Proof of Work)に代わる PoS(Proof of Stake)メカニズムが採用されています。例えば、EOS の DPoS や最近アップグレードされたイーサリアムの PoS などがあり、その発展はますます成熟しています。
- ローレベルチェーンの制約に対処するために、ビットコインのように単一のアプリケーションに対して単独のチェーンを構築するモデルから、スマートコントラクトを利用した DApp を構築するモデルに移行しています。
- パフォーマンスの制約に対して、ビットコインキャッシュはブロック容量を増やすことで対応し、EOS は TPS を向上させることで対応しています(百万 TPS と称されています)。イーサリアムはシャーディング(Sharding)を使用してチェーン上のトランザクションを並列処理しています。
- クロスチェーン技術に関しては、ハッシュロック(ハッシュロック)の方法がビットコインや Algorand プロジェクトで使用されており、他にもノートリストやリレーチェーンなどの解決策があります。
Cosmos ブロックチェーンフレームワーク#
概要#
Cosmos は、Tendermint 社が開発したオープンソースのブロックチェーンフレームワークプロジェクトであり、ブロックチェーン技術の発展に関連するさまざまな問題を解決し、高性能でスケーラブルで開発しやすいブロックチェーンフレームワークを提供することを目指しています。以下はそのオープンソースのアドレスです:
Cosmos は、マルチチェーンネットワークと見なすことができ、"インターチェーンネット" のビジョンを実現することを目指しています。Tendermint と Cosmos SDK はその技術手段と実現経路です。
Cosmos はリソース消費とトランザクションの問題に対して BFT(ビザンチン容錯)+ PoS(ステーク)のアプローチを採用しています。また、ブロックチェーンの構築とブロックチェーンベースのアプリケーション開発のハードルを下げるために、Cosmos は比較的一般的なプロジェクト構築方法を採用しており、Cosmos をベースにしたチェーン開発をよりモジュール化し、エンジニアリング化することを可能にしています。Cosmos は主に Tendermint Core、IBC、Cosmos SDK の 3 つのコンポーネントで構成されています。
Cosmos SDK コンポーネント#
「SDK」という名前から、いくつかの誤解を招くかもしれませんが、Cosmos SDK は完全なアーキテクチャであり、開発者はこれを使用して独自のブロックチェーンを迅速に構築することができます。Cosmos のエコシステムの重要な構成要素です。以下はそのオープンソースのアドレスです:
Cosmos SDK は、アカウントシステム、トランザクション、チェーンガバナンスなど、ブロックチェーンの一般的なモジュールを実装しています。開発者はこれをベースにして新しい機能モジュールを簡単に構築することができます。
以下は主なモジュールです:
- アカウントとトランザクションに関連するモジュール
- auth:システムアカウントの管理
- bank:チェーン上の資産移動
- サポート機能モジュール
- genutil:ジェネシスブロック
- supply:資産の総量管理
- crisis:すべてのモジュールの不変条件管理
- params:すべてのモジュールのパラメータ管理
- チェーンガバナンスモジュール
- gov:チェーンガバナンスメカニズム
- upgrade:チェーンのアップグレード
- PoS モジュール
- staking:チェーン上の資産ステーキング
- slashing:バリデータの不正行為への罰則
- evidence:バリデータの積極的な不正行為への罰則
- mint:チェーン上の資産鋳造
- distribution:ブロック報酬の管理
- IBC プロトコルモジュール
- ibc/core:クロスチェーン通信機能
Cosmos SDK は Object-Capability Model のセキュリティコンセプトに基づいて設計されており、高度にモジュール化されています。各モジュールは独自のストレージスペースを持ち、必要なインターフェースのみを公開しています。
Cosmos SDK には特定の Keeper 役割があり、状態の維持と更新を担当しています。この管理方法により、モジュール間は具体的な実装の詳細を隠し、Keeper を介して相互に呼び出すだけであり、各モジュールは Keeper によってのみ更新されるため、チェーン上の状態の一貫性が保証されます。
Tendermint コンポーネント#
Tendermint は Cosmos のコアコンポーネントであり、高性能なブロックチェーンの下部共有エンジンです。アーキテクチャ的には、ピアネットワーク通信レイヤー、コンセンサスプロトコルレイヤー、上位アプリケーションレイヤーの 3 つの主要な部分に分かれていますが、そのうちコンセンサスプロトコルレイヤーが重要な部分です。
Tendermint は共通のトランザクション詳細には関心を持たず、トランザクションをバイト単位でブロックにパッケージ化し、ノード間のメカニズムによって合意を形成します。上位アプリケーションの状態更新は決定論的なプロセスとなり、同じ初期状態から始まり、ネットワーク全体でトランザクションの順序が一致する(一連のメッセージに対して、すべての正常なノードが同じ順序で処理される)ことが求められます。上位アプリケーションの状態はネットワーク全体で一貫性が保たれるべきであり、ブロックチェーンは上位アプリケーションのデジタルフィンガープリントを含んで検証されます。
Tendermint の共識は、数百ノード規模のブロックチェーンネットワークで秒単位のブロック生成をサポートすることができ、ブロックの最終性(Finality)を提供します。つまり、ブロックが確定すると、それ以前のすべてのブロックは変更されないことが保証され、ブロックチェーンネットワークのセキュリティが確保されます。
ブロックの提出後、Tendermint の共識プロトコルレイヤーは上位層のアプリケーションと ABCI(アプリケーションと共識層の相互作用を抽象化したインターフェース)を介して対話し、トランザクション処理を完了し、結果を返します。ブロックの実行プロセスは複数のステップに分割され、上位アプリケーションはビジネスインタラクションロジックを定義するために独自の権限を持ち、特定のインターフェースを使用して開発および実装することができます(バリデータのフィルタリングロジックの実装や Tendermint Core の共識プロトコルとピアネットワーク通信の再利用など、チェーンのビジネス要件を満たすため)。
Tendermint の共識アルゴリズムの具体的なメカニズムについては、以下の論文を参照してください:
その独自のメカニズムにより、ブロックチェーンの共識プロセスには明確な利点があります。
まず、Tendermint は PBFT SMR(State Machine Replication)アルゴリズムに基づいていますが、そのメカニズムを簡素化しています。共識は主にブロックに基づいており、ユーザーのリクエストではなく、PBFT の通常のフローとビュースイッチングフローを統一しています。これにより、理解と実装が容易になりました。
Tendermint は、早期に数百ノード規模のブロックチェーンネットワークで秒単位のブロック生成をサポートできる堅牢な基盤と優れたユーザーエクスペリエンスを提供し、ブロックの最終性(Finality)により、以前のすべてのブロックが変更されないことを保証し、ブロックチェーンネットワークのセキュリティを確保します。
ノード間の通信は Gossip プロトコルを使用して行われ、ノード間のフルコネクションを要求せず、Gossip ピアネットワークを介して通信するため、ノード間の通信コストを効果的に削減し、ネットワークの耐障害性を向上させることができます。
Tendermint のアルゴリズムの詳細な実装とメカニズムについては、後続の記事で詳しく説明します。
IBC プロトコルコンポーネント#
IBC プロトコルは、Cosmos SDK の特別なモジュールであり、Cosmos にブロックチェーン間のクロスチェーン能力を提供します。その主な原理は、暗号技術を使用して自分自身のチェーン上のイベントを他のチェーンに証明することです。相互に軽量ノード(ライトクライアント)としての役割を果たすと考えることができ、2 つのチェーン間の通信はリレーアクターを介して行われます。
この部分には詳細が多く含まれており、クロスチェーンに関連するため、別の記事で詳しく説明します。
まとめ#
本稿は Cosmos および Tendermint の共識シリーズの第 1 回であり、ブロックチェーンの技術の発展、Tendermint および Cosmos SDK などの Cosmos ブロックチェーンフレームワークのコアコンポーネントについて紹介し、Tendermint の共識プロトコルの原理と各メカニズムについて概説しました。制約された範囲内で、主に概念の説明とプロセスの整理に重点を置いており、具体的な技術的な実装の詳細やコードの説明は含まれていません。これらは後続の記事で Tendermint の共識アルゴリズム / メカニズムおよび Cosmos SDK のコード実装について補完します。