メインコンテンツまでスキップ

Architecture

LCPは、2つのブロックチェーン間のMessage/Packetの送信をrelayするIBC Relayerと連携して動作する。受信チェーンは送信チェーンのLight Client検証を直接行わないため、RelayerはLCPに対して送信チェーンを検証するように要求する。そしてその検証結果をRelayerは受信チェーンに提出し、受信チェーンは代わりに検証する。

次の図は2つのchain間のLCPを用いたアーキテクチャおよびPacket-relayのフローである。

各コンポーネントの概要は以下の通りである。

Components

LCP Node

Intel SGXを搭載し、AppおよびLCP Enclaveを実行するNodeである。 Appによる平文のデータとLCP Enclaveによる暗号文をNodeのStorageに保持する。

App

Appは、LCP Enclaveのロードおよび初期化に加え、Relayerからの要求を元にUpstreamとの対話やELCへ検証の要求を行う。

また、AppはRemote Attestationのために、AEと対話を行い、LCP Enclaveの情報を含むQuoteを作成する。このQuoteをIASなどのAttestation ServiceへQuoteを送信することで、Verifiable Quoteを取得できる。

LCP Enclave

LCP Enclaveは、Enclave Light Client, Enclave Manager, HandlerのModuleから構成されるEnclaveである。Host ApplicationであるAppの起動時に読み込まれた後、Appからの要求をHandlerがroutingして適切なModuleにdispatchして処理を行う。

Enclave Light Client (ELC)

ELCは、Enclave内で動作するLight Clientを提供する。ELCは複数のChainのためのLight Clientをサポートする。

ELCは、RelayerからAppを介して与えられたUpstreamのcommitmentとproofを検証し、その結果を示す新たなcommitmentを生成する。EMより得たEnclave Keyを用いてそのcommitmentに署名を行うことで、新たなProofを生成し、commitmentとともにAppに返す。Appからそれらを受け取ったRelayerはDownstreamにそれを提出し、LCP Clientにより検証される。

詳細についてはこちらを参照。

Enclave Manager (EM)

EMは、ELCのcommitmentのproofを生成するためのEnclave Keyを生成・管理する。また、外部の検証がEnclaveの妥当性を確認するためのRemote Attestationのプロセスを利用して、Enclave Keyの公開鍵を含むReportを生成する。

Attestation Service

remote partyによるenclaveの妥当性の確認を可能にするためのRemote Attestationを提供するserviceである。IAS、Microsoft Azure Attestation(MAA)があり、外部serviceを必要としない方式としてECDSA attestationがある。LCPでは、最初にIASをサポートしている。このドキュメントでは特に注釈がない限りはRemote AttestationについてはIASの利用を前提に記述する。

Attestation Serviceにより得られたVerifiable Quoteの署名を検証することで、Quoteに含まれるデータが正しく対象のEnclaveにより構成されたことがわかる。これにより、検証者はQuote内のEnclave Keyの妥当性を確認できる。このプロセスの詳細はRemoteAttestationで述べる。

Relayer

Relayerは通信する2つのChainの間に存在し、検証を行うChainに必要なデータを提供するために検証先のChainやLCP Nodeと対話を行う。これはIBCにおけるRelayerと同義である。

LCP Client

LCP Clientは、ELCのcommitmentとproofを検証するIBC Clientである。LCPを利用して対象chainの妥当性の確認を行うChainはIBC ClientとしてこのClientを用いる必要がある。 LCP Clientは、Appが生成したLCP EnclaveのためのVerifiable Quoteを検証した上で、そこに含まれるEnclave Keyの公開鍵を取得し保持する。Downstream上のLCP Clientはその鍵を用いてELCにより生成されたcommitmentを検証し、Upstreamのcommitmentの妥当性の確認を行う。

詳細についてはこちらを参照。

Packet-relay flow

Packet-relayの各ステップは次のようになる。

  1. 最初にRelayerはchainA上でchainB宛のPacketが送信されたことを検出する
  2. RelayerはLCP NodeのAppにchainAを検証するように要求する
  3. AppはLCP EnclaveにPacketを検証するためにVerifyPacketCommandを送信する。また、Handlerはcommandをhandleし、ELCにpacketの検証を要求する。
  4. ELCはchainAに対応するLight Clientによりpacket commitmentを検証し、そのcommitmentにEnclave Keyにより署名を行いproofを生成する
  5. 4.のcommitmentとproofをEnclaveは返し、AppはそれをRelayerに返す
  6. Relayerは5.のcommitmentとproofをchainBに提出し、chainB上のLCP Clientによりpublic Enclave Keyを用いて検証される

なお、Packetのrelayを行う前に、chain上のLCP Clientの初期化を行う必要があることに注意する。この初期化についてはLCP Clientで述べる。