Libra Protocol: Key Conceptの要約
このページは、Libra blockchain protocolの全貌について簡単に書かれています。全体を理解しておくと後の詳細な説明が分かりやすくなると思われます。Ethereumと似たところが多いですが、細かく違うところもあり、差分をしっかり把握しておく必要がありそうです。
Libra Protocol: Key Concept
Libra BlockchainはValidatorと呼ばれるValidator nodeの分散ネットワークである。
以下で説明するコンセンサスアルゴリズムでオーダーを取り込む。
テストネットはLibra Blockchainソフトウェア(Libra core)のアーリープロトタイプ
トランザクションとステート
Libra protocolの核心部分は、トランザクションとステートという二つの概念。
ブロックチェーンにはステート(Ledger state)があって、ステートはその瞬間のBlockchainデータのスナップショット。
トランザクションが実行されるとBlockchainのステートが変わる。
その下の図のSn = F(SN-1.TN)は図の三角と四角に間違いがある。おそらくこう書きたかった。
アリスとボブのLibraコインのトランザクションがステートを書き換える例から、トランザクションとステートの関係を説明している。
トランザクション
Libraブロックチェーンのクライアントは、Ledger stateのアップデート要求を提出する。
ブロックチェーン上の署名されたトランザクションは次のものを含む
- Senderアドレス:トランザクション送信者のアドレス
- Sender public key:トランザクションの署名に使われたプライベートキーに対応するパブリックキー
- Program:次によって構成されるプログラム
- Moveのバイトコードトランザクションスクリプト
- スクリプトのインプットのオプショナルリスト。P2Pトランザクションの場合、インプットには受信者の情報と、受信者に送られる金額が含まれている。
- 公開するMoveバイトコードモジュールのオプショナルリスト。
- Gas price(通貨の種類とGas Unit):トランザクションを実行するために、送信者がGas Unitあたりで支払う金額。Gasは、計算処理とストレージのために支払う手段。Gas Unitは、計算処理の抽象的な計量値であって、実世界の(計算処理の)価値とはつながりがない。
- Maximum gas amount:消費して良い最大のGas単位。
- Sequence number:送信者のアカウントごとに保存されている通し番号と等しい、符号なし整数。
- Expiration time:トランザクションが有効でなくなる時間。
- Signature:送信者のデジタル署名
トランザクションスクリプトは、トランザクションのロジックがエンコードされたもので、Libra Blockchainの分散データベース内に発行されたリソースに作用する任意のプログラム。
Ledger State
Ledger stateあるいはLibra blockchainのGlobal stateはブロックチェーン上のすべてのアカウントの状態から構成される。トランザクションを実行するために、すべてのバリデータはブロックチェーンの最新のglobal stateを知らなければいけない。(下のversioned databaseを参照)
Versioned Database
Libra blockchainのすべてのデータは単一バージョンの分散データベースに永続化される。
バージョン番号はシステムが実行済みのトランザクション数に対応した符号なし64ビット整数である。
バージョン付されたデータベースはバリデータに次のことを許可する。
- 最新のLedger stateに対してトランザクションを実行する。
- 現行と過去のバージョンのLedger履歴についてクライアントの問い合わせに応答する
Account
リブラのアカウントはMoveモジュールとMoveリソースのコンテナです。
アカウントアドレスによって特定される。
それぞれのアカウントの状態は次のコードとデータによって構成される。
- Moveモジュール:move moduleはコードであってデータではない。モジュールのプロシージャはblockchainのグローバルステートをアップデートするルールのエンコード。
- Moveリソース:move resourceはデータであってコードではない。すべてのリソース値は、ブロックチェーンに発行されているモジュールで定義されている型を持っています。
アカウントは任意の個数のリソースとモジュールを持つことができる。
Account Address
Libra accountのアドレスは16バイトの値
デジタル署名を使ってユーザはアドレスの保有を証明できる
アカウントアドレスは、ユーザーの公開検証鍵の暗号化ハッシュに署名方式の識別子バイトを連結して作られる。
Libraは2つの署名方式「Ed25519」と「MultiEd25519(複数の署名トランザクション)」をサポートしている。
アカウントアドレスから送信されたトランザクションに署名するには、ユーザー(またはユーザーを代表する保管者のクライアント)は、そのアカウントに対応する秘密鍵を使用しなければならない。
Proof
Libra blockchainのすべてのデータは単一バージョンのDBに保存されている。
ストレージは、合意されたトランザクションのブロックとその実行結果を永続化するために使用される。
ブロックチェーンは、成長するトランザクションのマークルツリーとして表現される。実行された各トランザクションの「リーフ」がツリーに追加される。
- プルーフはデータの真実性をLibra blockchain上で検証する方法
- ブロックチェーン上にストアされているすべての操作を暗号的に検証することができ、その結果は、データが省略されていないことも証明する。例えば、クライアントがアカウントから最新のn件のトランザクションを問い合わせした場合、プルーフはクエリー応答からトランザクションが省略されていないことを立証する。
ブロックチェーンで、クライアントはデータを受信しているエンティティを信頼する必要はない。
クライアントは、アカウントの状態を問い合わせたり、特定のトランザクションが処理されたかどうかを問い合わせることができる。
他のマークルツリーと同様に、Ledger historyは実際のトランザクションオブジェクトのプルーフをO(log n)サイズ(nは処理されたすべてのトランザクション数)にできます。
Validator Node (Validator)
Libra Blockchainのクライアントはトランザクションを作成し、バリデータノードに提出する。
バリデータノードは(他のバリデータノードと一緒に)コンセンサスプロトコルを実行し、トランザクションを実行して、そのトランザクションと実行結果をブロックチェーンに保存する。
バリデータノードは、どのトランザクションをどの順番でブロックチェーンに追加するかを決める。
バリデータノードは次の論理コンポーネントを含む
Admission Control(AC)
Admission Controlはバリデータノードの唯一の外部インターフェイス。クライアントからバリデータノードへのリクエストはすべて最初にACに送られる。
ACはバリデータノードの他のパートを破損や大量のインプットから保護するための初期チェックを行う。
Mempool
Mempoolは実行待ちのトランザクションを保持するバッファ。
新しいトランザクションがバリデータノードのmempoolに加えられたら、このバリデータのmemopoolはシステム内の他のバリデータノードのmemopoolにシェアされる。
Consensus
コンセンサスコンポーネントは、ネットワーク内の他のバリデータノードとのコンセンサスプロトコルに参加し、トランザクションのブロックを順序付けし、実行結果に合意する役割を担う。
Execution
実行コンポーネントはトランザクションを実行するために仮想マシン(VM)を使う。
実行コンポーネントの仕事は、トランザクションのブロックの実行を調整し、コンセンサスによる投票が可能な一時的な状態を維持すること。
実行コンポーネントは、コンセンサスがブロックを分散データベースにコミットするまで、実行結果のインメモリ表現を維持する。
Virtual machine(VM)
ACとMempoolはVMコンポーネントを利用してトランザクションの検証チェックを行う。
VMはトランザクションを含むプログラムを実行し、結果を決める。
Storage
ストレージコンポーネントは合意済みトランザクションのブロックとその実行結
果を永続化するために使われる。
それぞれのバリデータコンポーネントのインタラクションについての情報は「Life of a Transaction」のところに書いてある。
元記事リンク
