R3の分散台帳技術 Cordaを試した

# 前置き
国内外の多数の金融機関からなるコンソーシアム団体 「R3 CEV」彼らが公開したOSS分散台帳技術Cordaを試してみました。
あえて分散台帳技術(Distributed Ledger Technology DLT)というワードを使い、Blockchainというワードを使ってないんですが、それには理由があります。

だってブロックチェーンじゃないんですこれ。
というのもR3は下の記事でブロックチェーンは使えない・・・とレポーティングしてます。
https://themerkle.com/r3-admits-defeat-stops-blockchain-development/

個人的には、当時あまりにももてはやされていたBlockchainに対して「そんなに便利なものじゃないよ」と言いたかっただけで全く使えないと彼らも考えてはいないんじゃないとは思ってますが。とにかくCordaはBlockchainじゃないんです。

# CordaがBlockchainじゃない理由。

これだけではないですが、一番違うなぁと思ったところを。

従来のブロックチェーンは、ネットワークを構成する全てのノード(※最近はデータを持たないノードを作れたりできるものもありますが基本は全部持つ)のに対してCordaは取引の当事者間のみデータを持ちます。(全ての取引を見られるスーパーノードみたいなものは作れます。)

<img width="721" alt="スクリーンショット 2017-05-03 17.20.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/166104/3cf3336a-f40d-24f1-a399-6ef9a2dae8a2.png">

これがいいのか悪いのかといった話はちょっとここでは控えます。

# サンプルを動かしてみる。

* 環境　Mac OS X

## ダウンロード

```
$  git clone https://github.com/corda/cordapp-template.git
Cloning into 'cordapp-template'...
remote: Counting objects: 1791, done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 1791 (delta 6), reused 0 (delta 0), pack-reused 1764
Receiving objects: 100% (1791/1791), 1.39 MiB | 636.00 KiB/s, done.
Resolving deltas: 100% (706/706), done.
```

## ビルド

```
$ cd cordapp-template
$ ./gradlew deployNodes
Downloading https://services.gradle.org/distributions/gradle-3.4.1-all.zip
................................................................................................

---( 中略 )---

         https://repo1.maven.org/maven2/net/corda/corda/0.11-SNAPSHOT/corda-0.11-SNAPSHOT.pom
         https://repo1.maven.org/maven2/net/corda/corda/0.11-SNAPSHOT/corda-0.11-SNAPSHOT.jar
         https://jcenter.bintray.com/net/corda/corda/0.11-SNAPSHOT/maven-metadata.xml
         https://jcenter.bintray.com/net/corda/corda/0.11-SNAPSHOT/corda-0.11-SNAPSHOT.pom
         https://jcenter.bintray.com/net/corda/corda/0.11-SNAPSHOT/corda-0.11-SNAPSHOT.jar
         https://dl.bintray.com/kotlin/exposed/net/corda/corda/0.11-SNAPSHOT/maven-metadata.xml
         https://dl.bintray.com/kotlin/exposed/net/corda/corda/0.11-SNAPSHOT/corda-0.11-SNAPSHOT.pom
         https://dl.bintray.com/kotlin/exposed/net/corda/corda/0.11-SNAPSHOT/corda-0.11-SNAPSHOT.jar
         https://jitpack.io/net/corda/corda/0.11-SNAPSHOT/maven-metadata.xml
         https://jitpack.io/net/corda/corda/0.11-SNAPSHOT/corda-0.11-SNAPSHOT.pom
         https://jitpack.io/net/corda/corda/0.11-SNAPSHOT/corda-0.11-SNAPSHOT.jar
     Required by:
         project :java-source
   > Could not find net.corda:corda-webserver:0.11-SNAPSHOT.
     Searched in the following locations:
         file:/Users/aky/.m2/repository/net/corda/corda-webserver/0.11-SNAPSHOT/maven-metadata.xml
         file:/Users/aky/.m2/repository/net/corda/corda-webserver/0.11-SNAPSHOT/corda-webserver-0.11-SNAPSHOT.pom
         file:/Users/aky/.m2/repository/net/corda/corda-webserver/0.11-SNAPSHOT/corda-webserver-0.11-SNAPSHOT.jar
         https://repo1.maven.org/maven2/net/corda/corda-webserver/0.11-SNAPSHOT/maven-metadata.xml
         https://repo1.maven.org/maven2/net/corda/corda-webserver/0.11-SNAPSHOT/corda-webserver-0.11-SNAPSHOT.pom
         https://repo1.maven.org/maven2/net/corda/corda-webserver/0.11-SNAPSHOT/corda-webserver-0.11-SNAPSHOT.jar
         https://jcenter.bintray.com/net/corda/corda-webserver/0.11-SNAPSHOT/maven-metadata.xml
         https://jcenter.bintray.com/net/corda/corda-webserver/0.11-SNAPSHOT/corda-webserver-0.11-SNAPSHOT.pom
         https://jcenter.bintray.com/net/corda/corda-webserver/0.11-SNAPSHOT/corda-webserver-0.11-SNAPSHOT.jar
         https://dl.bintray.com/kotlin/exposed/net/corda/corda-webserver/0.11-SNAPSHOT/maven-metadata.xml
         https://dl.bintray.com/kotlin/exposed/net/corda/corda-webserver/0.11-SNAPSHOT/corda-webserver-0.11-SNAPSHOT.pom
         https://dl.bintray.com/kotlin/exposed/net/corda/corda-webserver/0.11-SNAPSHOT/corda-webserver-0.11-SNAPSHOT.jar
         https://jitpack.io/net/corda/corda-webserver/0.11-SNAPSHOT/maven-metadata.xml
         https://jitpack.io/net/corda/corda-webserver/0.11-SNAPSHOT/corda-webserver-0.11-SNAPSHOT.pom
         https://jitpack.io/net/corda/corda-webserver/0.11-SNAPSHOT/corda-webserver-0.11-SNAPSHOT.jar
     Required by:
         project :java-source

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 1 mins 53.777 secs
```

こけました・・・
githubのmasterがいけてないようだ。気を取り直してgithubのリリースから
最新の「cordapp-template-release-M10.1」を落としてビルドしてみました。

```
$ cd cordapp-template-release-M10.1/
$ ./gradlew deployNode
Download https://repo1.maven.org/maven2/net/corda/plugins/publish-utils/0.10.3/publish-utils-0.10.3.pom
Download https://repo1.maven.org/maven2/net/corda/plugins/cordformation/0.10.3/cordformation-0.10.3.pom

---( 中略 )---

:kotlin-source:copyTestKotlinClasses
:kotlin-source:processTestResources
:kotlin-source:testClasses
:kotlin-source:test
:kotlin-source:check
:kotlin-source:build
:kotlin-source:deployNodes

BUILD SUCCESSFUL

Total time: 2 mins 59.906 secs
```

いけました。


## サンプルアプリを起動

```
$ cd kotlin-source/build/nodes/
$ sh runnodes
Starting nodes in /Users/aky/cordapp-template-release-M10.1/kotlin-source/build/nodes
Starting node in /Users/aky/cordapp-template-release-M10.1/kotlin-source/build/nodes/Controller
Starting webserver in /Users/aky/cordapp-template-release-M10.1/kotlin-source/build/nodes/Controller
Starting node in /Users/aky/cordapp-template-release-M10.1/kotlin-source/build/nodes/NodeA
Starting webserver in /Users/aky/cordapp-template-release-M10.1/kotlin-source/build/nodes/NodeA
Starting node in /Users/aky/cordapp-template-release-M10.1/kotlin-source/build/nodes/NodeB
Starting webserver in /Users/aky/cordapp-template-release-M10.1/kotlin-source/build/nodes/NodeB
Starting node in /Users/aky/cordapp-template-release-M10.1/kotlin-source/build/nodes/NodeC
Starting webserver in /Users/aky/cordapp-template-release-M10.1/kotlin-source/build/nodes/NodeC
Started 8 processes
Finished starting nodes
```

バーっとターミナルが立ち上がります。

と思ったらなんかこけてます・・・
もう一度起動してみたら行けました。


<img width="572" alt="スクリーンショット 2017-05-03 18.26.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/166104/1ec6fd0b-de66-8943-4576-a0f1ec344875.png">


簡単な送金アプリが起動するので、ぜひ触ってみてください。

# 参考

* 公式ページ https://www.corda.net/ja/
* Github https://github.com/corda/cordapp-template