CordaのFlowとは?サクッと概要を説明

CordaのFlowとは?サクッと概要を説明

はじめに

分散型台帳のCordaにおける「Flow」とは、契約の提案⇒契約内容の精査⇒契約への合意⇒契約への署名といった現実の契約における一連の流れを、プログラム化して自動化するための仕組みです。

今回はFlowについて簡単に解説していきます。

そもそもCordaとは?

※Cordaの概要を知っている方は、次の「Cordaでの台帳の更新」からご覧ください。

Cordaは、取引の秘匿性が求められるケースに適した分散型台帳基盤(ブロックチェーン)です。2016年に公開され、アメリカのソフトウェア企業「R3」によって開発されています。

金融領域でも使えるブロックチェーンとして開発が進められていたこともあり、既存のブロックチェーン基盤のなかでは、取引のプライバシーを高度に担保できる点が特徴的です。

Cordaでは、コンソーシアムネットワークの参加者全体に対する取引の共有を前提とせず、基本的には取引の当事者と、二重支払いといったの不正防止を行うコンセンサスノード「Notary」のみにトランザクションが共有されます。

Cordaをベースに開発され、Cordaのノードで動くアプリケーションは「CorDapps」と呼ばれており、金融領域だけではなく、サプライチェーン管理や不動産の登記といった非金融領域でも採用されています。

その他、Cordaの概要に関しては以下の記事で解説していますので、興味のある方はぜひご覧ください。

Cordaでの台帳の更新

ビットコインやイーサリアムのスマートコントラクトにおけるトランザクションでは、一人のトランザクションの実行によって全ノードの台帳が更新されるというシンプルな手順で実行されます。要するに、ビットコインやイーサリアムではトランザクションの送信ノードが電子署名をするだけで良いのです。

一方、前述したようにCordaのトランザクションは、契約の当事者間でのみ実行されます。そのため、トランザクションの実行時には相手方ノードを指定する必要があります。

契約の片方(=トランザクションの作成者)による電子署名に加えて、契約のもう一方の当事者(トランザクションの受け手)による契約内容の確認と署名および、Notaryによる署名も必要となります。

AliceとBobによる台帳更新手順のイメージ

二者間のトランザクションによる台帳のアップデートのイメージに関しては以下のアニメーションが直感的に理解しやすいです。

https://docs.corda.net/docs/corda-os/4.5/key-concepts-flows.html

また、CordaのFlowsに関しては以下の動画でも解説されています(日本語字幕付き)。

Key Concepts 8 – Flows from R3 on Vimeo.

Notaryについて

上記のアニメーションでは、Notaryが登場していませんが、実際に本番環境ではAliceとBobの署名に加えて、Notaryによる署名が必要です。

必要な署名がすべて集まり、トランザクションがコミットされると、ファイナリティが与えられます。

Notaryにはトランザクションのハッシュのみをチェックし、過去に当該トランザクションが消費されていないかを検証する「Non-Validating Notary」と、トランザクションの中身を検証する「Validating Notary」の2種類が存在します。

Flow framework

前述したように、Cordaではひとつのトランザクションに対して、契約の関係者とNotaryが署名しなければなりません。これらの手順を毎回マニュアルで指定するのではなく、自動化するためにあるのがFlowです。

Flow図

以下の図はCordaにおけるFlowの流れを表したものです。

flow sequence
https://docs.corda.net/docs/corda-os/4.5/key-concepts-flows.html

流れを追っていきましょう。

Flow実行の流れ

契約には契約の提案側(Initiator)と、契約の提案を受け取って合意をする側(Responder)が存在します。したがって、Flowには契約の提案側のプロセスを表す「Initiator Flow」と、契約の提案を受ける側の「Responder Flow」が存在します。

契約の提案側はInitiator Flowを自分のNodeにデプロイします。一方で、契約を受け入れる側は、Initiator Flowのコードを契約の提案側から共有してもらった上で、契約の受け入れ条件を設定したResponder Flowを作り自分のNodeにデプロイします。

これで両者間でのビジネスフローの準備が整います。以後、契約の提案側はInitator Flowを起動することで契約を相手方に打診し、契約内容がResponder Flowで定められていた条件に適合する場合には自動で契約が合意され、両者の共有台帳が更新されます。

まとめ

今回はCordaのFlowについて概要を紹介しました。当メディアでは、CordaのFlowを含め、CorDappを作成する手順についても紹介しています。

以下の記事では、KotlinのCorDappテンプレートを利用したIOUコントラクト(借用コントラクト)を実装していますので、興味のある方はぜひご覧ください。

参考資料:
Flows

ブロックチェーンカテゴリの最新記事