株式会社Datachainにて主にブロックチェーンの研究開発を担当している吉田です。
Hyperledger Lab YUIは、複数の異なるブロックチェーンをIBCプロトコルで相互に接続できるようにするブロックチェーン相互運用性技術のプロジェクトです。YUIはこれまでHyperledger FabricやHyperledger Besuをサポートしてきましたが、今回、Cordaに対応したIBCモジュール(Corda-IBC)を正式に発表しました。
すでにご存知の方も多いと思いますが、Cordaは世界最大級のエンタープライズブロックチェーンプラットフォームです。デジタル通貨、金融システム、サプライチェーンマネジメントなど、さまざまなプロジェクトに利用されています。
今回は、Corda-IBCの概要と、IBCを介してCordaと他のブロックチェーンとの相互運用性をどのように実現しているのかをご紹介します。
IBCに関するmediumはこちらをご覧ください。
Corda-IBCの概要
Corda-IBCは、IBC/TAOとICS-20をCordaのコントラクト及びフローの形態で実装し、クライアントがIBCオペレーションを実行したり、IBCステートにアクセスするためのgRPC APIサービスを提供します。Cordaの世界には、グローバルステートは存在しません。言い換えれば、Cordaはブロックチェーンプラットフォームではありません。しかし、このような環境でもIBCを実装する方法はあります。
CordaのUTXOモデルでは、複数のトランザクションを経て繰り返し更新されて生き続ける状態クラスを実装することができます。このような出力状態を、Cordaでは線形状態(Linear state)と呼びます。各線形状態は、一続きの線形な状態遷移を形成しており、これはブロックチェーンが一続きの線形な状態遷移を形成するのと同様です。
Corda-IBCでは、「Host」という特別な線形状態クラスを定義し、HostをIBC接続の端点として扱います。実際には、ClientState、Connection、ChannelなどのIBC関連のいくつかの状態は、パフォーマンスを向上させるためにHostとは別に作成されます。
Corda-IBCの基本的な考え方は、1つのHost状態と、その下に作成された複数のIBC関連状態からなる一群の線形状態を、IBCを介して他のブロックチェーンに接続する一つのブロックチェーンとみなすことです。Cordaの各出力状態の実在と、期待される条件を満たしていることを証明するには、当該状態を出力として含み、適切な当事者(Notaryなど)によって署名されたSignedTransactionを示せば良いわけです。
Contract States
Corda-IBC が定義する全てのコントラクト状態は、いずれか一つの Host 状態の下に作成されます。次の図は、Corda-IBCの状態群がどのように作成されるかを示しています。
Host状態とその下に作成される全ての状態は、同じ「ホストID」を共有します。また、同じHost状態に属する全ての状態は、そのHostのスコープ内でユニークな「状態ID」を持っています。
一方、同一の公証人によって公証されたすべてのHost状態は、その公証人の範囲内でユニークな「ホストID」を持つことが、簡単なトリックによって保証されています。したがって、ホストIDと状態IDの組み合わせは、公証人の範囲内でユニークな1つの状態を指定するIDとなります。
Operations (Flows)
IBC規格では、updateClient、connOpenInit、chanOpenInit、recvPacket、 acknowledgePacketなど、IBCの状態を更新するためのオペレーションが定義されています。
Corda-IBCでは各IBCオペレーションをフローとして実装しています。次の図は、Corda-IBC 関連のトランザクションがどのように設定され、有効であることが検証されるかを示しています。各IBCオペレーションは、IBC(ICS)で定義されたシンタックスとセマンティクスに準拠しています。
以下の図は、Corda-IBCにおけるトランザクションの作成ステップを示しています。
以下の図は、Corda-IBCにおけるトランザクションの承認ステップを示しています。
Corda-IBCに対するライトクライアント
IBCの文脈では、外部のライトクライアントによって、指定された状態が対象の台帳上に確かに存在することを、状態そのものと状態の簡潔な証明を検査するだけで検証できる必要があります。
例えば、ブロックヘッダにマークル化された状態のルートを埋め込むブロックチェーン(Ethereumなど)で言えば、状態に対応するマークルプルーフを生成・検証することで、状態の存在を証明・検証することができます。また、ブロック自体も、ブロックチェーンの「コンセンサスルール」を満たしているかどうかを確認することで、検証することができます。
Cordaの場合、一般的なブロックチェーンよりもはるかに簡単に、状態の存在と内容を検証することができます。Notaryの公開鍵と対象となるHostのホストIDが与えられている前提で、Corda-IBCのライトクライアントは、対象Hostの配下に作成された状態を、提示されたSignedTransactionが以下の条件を満たすかどうかチェックすることで検証できます。
- 想定通りの公証人によって署名されていること
- 対象となる状態が出力として含まれていること
✓当該状態が想定通りのホストIDを持っていること
✓当該状態が想定通りの内容になっていること
最後に
IBCがエンタープライズ領域に適応するためには、主要なエンタープライズ・ブロックチェーン・プラットフォームをサポートすることが重要です。DatachainはYUIプロジェクトを通じてこの取り組みに積極的に貢献しており、Corda-IBCもこの目的のために開発されています。
Corda-IBCは、今のところIBC/APPとしてICS-20のみをサポートしていますが、次のステップでは、様々なIBC/APPの実装を構築するためのSDKとして進化する予定です。Corda-IBCとYUIプロジェクトにご期待ください。