Cordaとは何か?

旗手友和氏(以下、旗手):はい、よろしくお願いします。私、普段、こういうライトニングトークみたいなものやらないので、簡単に自己紹介します。最近転職して、とある企業で、R3のCordaというものをやり始めました。いわゆるプライベート型のチェーンなので、ここにはあまり馴染みのある人はいないかなと思いますが。

私自身はどちらかというと、EthereumとかBitcoin Coreというパブリック型のほうが好きです。例えば、先ほど発表いただいたEthereumのERC725なんかも、以前公開講義でチラッと言ったことがあります。ぜんぜん簡単なところだけですが。

あと、将来はトークン・エコシステムみたいな、DEXでいろんなものがすべてつながって、トークンでやりとりするとか、Atomic Swapだとか、そういうのでいろんなチェーンがつながって、暗号通貨において1つの経済圏みたいなものができていくのを楽しみにしてますし、私自身それを目指しています。とりあえず今は、企業に勤めてることもあるので、Cordaの話を簡単にしていこうと思います。

Cordaは、簡単に言うと、一般的に金融機関向けとして使われるプラットフォームです。R3自体は、金融機関以外のもっと汎用的なところも目指してるんですが、やっぱり金融機関のエンジニアが多く集まったので、まずは金融のところから押さえていこう、という経緯でできたものです。

Cordaはブロックチェーンではない

EthereumにDAppsというものがあるんですけど、CordaもCordaネットワーク上にDAppsを構築して、そのCorDappsという分散型アプリケーションを使って、取引のやりとりをします。

みなさんもご存知だと思いますが、Cordaはブロックチェーンではないです。要するに、とあるブロックの中に一定数のトランザクションが入って、それがナンスとかでつながって、どんどんどんどんブロックがつながって、ledger(台帳)が更新していきますよ、というかたちではない。あくまで、取引する2者間の中だけ、ある特定の取引者の間でだけデータが共有されるモデルを取っています。

ただ、結局、Mike Hearn(注:元Bitcoin Coreの開発者)がR3にいることや、あるいは、もともとR3としてEthereumの研究から始めていたりということもあって、Bitcoin CoreとかEthereumの良い要素をいっぱい取り入れてたりもします。

資料やスクリプトはすべて無料公開、トレーニングも

まず、実はR3って、トレーニングをけっこう熱心にやってまして、月1回ベース、ロンドンとかそういったところで、値段はちょっと高いんですけど、30万ぐらい取ってやってます。ただ、資料とかスクリプトとかは全部GitHub上で公開されてるので、実は1人でもやろうと思えばできたりもします。

これはそのGitHub上に公開されてる資料を、そのままお見せしてる感じです。ちなみに、日本でやると、一応12万ぐらいで受けられます。まあ、それでも高いと思ってます。なので個人でやりたければ、一応オープンソースなので(GitHub上のトレーニング用ソースやドキュメントを)どうぞご活用ください。

CordaネットワークとCorDapps

(スライドを指して)ここに書いてある“Corda network”というもの、これが1つのネットワークです。

ノードAとかノードBとか、これは例えば金融機関とかのノードだと思っていただければいいんですけど、ここにノータリー・ノードというものがあります。

ノータリー・ノードが、Bitcoin Coreでいうプルーフ・オブ・ワークをするところです。マイナーみたいなもので、この人(厳密には単なるノード)が最終的にこの取引は正しい、大丈夫だという正当性を証明しています。

ノータリー・ノードって、図で表すと単一障害点のように見えるんですけど、実はこれ自体はクラスタ化されているので、例えば(クラスタ化された)ノータリー・ノード(の一つである)Aが壊れても別のBがつながるようなかたちになっているので、厳密には単一障害点ではないです。

それ以外にも、許可サービスみたいなものがあって、何をしてるかというと、結局要するにプライベートネットワークなので、(ノードの)AとかBとかCとかDに「あなたは参加していいですよ」ということを決めたり、別の人が勝手に入ってこようとしたら「入っちゃダメだよ」って言ったり。「新しく入りたい」って言ったら、ここに追加して「君、入っていいよ」っていうかたちにしています。

一方でこのネットワーク・マップ・サービスというものにも、ノードAとかノードBとかノードCとかの情報が入っているようなかたちになっています。

CorDappsという、最初のほうでもお話しした分散アプリケーションの中には何が入ってるかというと、ステートと、それからコントラクトですね。スマートコントラクトはちょっと別で、単なるベリファイ(トランザクションの検証)しかしてないものがあるんですが。それからトランザクションというか、(トランザクションを作成し、そのトランザクションを取引相手に提案し、最終的に取引を成立させる一連の流れを規定した)フローの3つになってます。

取引に適したロジックを組める

(スライドを指して)ステートはこういうかたちになってまして、簡単に言うと、この図例はIOUですね。IOUというのは一種の借用証明書です。このステートがあるとしたら、このようにいろんなプロパティ、パラメータを入れることができます。

借り手とか、貸し手とか、お金だとか、期限とかを全部パラメータ設定して、なおかつそのコントラクトに対する参照情報と、それから参加者の情報、例えばアリスとボブについての情報を持っています。

このステートに対して(スライドを指して)こういうかたちでコントラクトがあります。

先ほど、ステートはコントラクトへの参照を持っていると言ったんですけど、このようになります。例えば“CASH”というステートだったら、“CASH”というステートは常にそれに対応したコントラクトを見にいくような動きです。“BOND”だったら“BOND”に対する、まあ、債券ですね、それに対するコントラクトを持っているというかたちです。

中を見ていただいたらわかるように、実はトランザクションの枠の中に複数のステートが入っています。

Cordaにおいては、1つのトランザクションの中に複数の型のステートを入れることができます。

トランザクションはアトミックなので「このステートの変遷はOKだけど、このステートの変遷はダメだよ」という時は、トランザクション自体を完全にバツにしてしまう(承認しない)ことができる。そういう意味で、いろんな表現方法ができます。

例えば、DVP、Delivery Versus Paymentのような、債券と決済を交換してやるようなものでは、債券はうまくいってるのに、決済だけダメでしたというわけにはいかない。そういうとき、両方の検証が通ってはじめてOKにするというようなことも、表現できたりします。

システム全体が金融機関向き

こういうふうに、意外といろんな使い道ができます。あとは、(Bitcoinで採用している)UTXOモデルを使っているので、複数のインプットをもとに、アウトプットをうまくつくったりすることができます。

Bitcoinと少し違うところは、Bitcoinだともしかしたら、自分でこのインプットとこのインプットを使ってアウトプットということができなかったかもしれないですけど。

Cordaはどっちかというと、このインプットとこのインプットを使ってこのアウトプットをつくるというふうに、自分で明確に示す形になっています。そのへんがちょっと違うのかなという気がします。

あとは、フローが何をしてるかを簡単にいうと、例えば「あるトランザクションをつくります」と提案者(例えばアリス)が提案して、それに対して(アリスが)自分の署名とかを載せる。そして、こういうかたちでボブに投げて、ボブが検証して、また署名して返す。そしてアリスに返したら、またアリスが署名するという、1つの流れを規定するものになってます。

当然その間、他の関係者は一切関知しない。つまり、トランザクションはネットワーク上にあるんですけど、ポイント・トゥ・ポイントのやり方なのでブロードキャストしない。だから、このアリスとボブ以外の人たちは誰もその取引が行われたかどうかを関知できない、見る・見られないどころか、(同じネットワーク上にいながら)取引の存在すらわからないことになります。

そういう意味で、金融機関向けに適している考え方になります。駆け足ですが、以上となります。

(会場拍手)