5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CordaをやってMirda

Last updated at Posted at 2019-05-08

神がかっていたOBPCSの無料試用期間が過ぎてしまったので、~~雑食的にCordaを触ってみようと思います(この言い回しは失礼だな)。~~第3世代ブロックチェーンと称される「Corda」を触ってみようと思います。
今回は、公式で提供されている「CorDapp」を動かすところまで実施します。

2019年2月にCorda4がリリースされた影響なのか、他の方々の記事を見ていると、若干ディレクトリ構成が異なっていたりするようなので、この記事が3mmくらい参考になれば幸いです。

はじめに

  • Macユーザを想定しています。
    • Windowsユーザの方、ごめんなさい
    • 自分がWinユーザだったら、文句吐き捨てて秒でこの記事を閉じるな
    • 公式には Windows/Mac/Ubuntu/Fedora での手順が記載されていますので、そちらをご参考ください
  • CordaやCorDapp、ブロックチェーン云々等についての説明は省きます。
  • 内容は公式ドキュメントのクイックスタートを参考にしています。詳細はそちらを御覧ください。

ソフトウェア要件

  • Java8
    • Java9以降はサポートしてない
    • →最初、JDKが11のままやろうとしたら、途中でエラー出たので、要件はしっかり守りましょう
  • IntelliJ IDEA 2017.x / 2018.x / 2019.x
  • Gradle 4.10
  • Git

Javaのインストール

すでにインストールしてある人はスキップ可

▼下記サイトから、JDKのZipをダウンロードし、実行する
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
※Oracleプロファイルへサインインしないとダウンロードできない模様
image.png

▼確認

$ java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)

IntelliJ のインストール

すでにインストールしてある人はスキップ可

▼下記サイトから、ファイルをダウンロードし、実行する。
https://www.jetbrains.com/idea/download/download-thanks.html?platform=mac&code=IIC

IntelliJ のセットアップ

▼「Configure」>「Plugins」を選択
image.png

▼「Kotlin」を検索
image.png

※バージョンが「1.2.71」未満であれば、Updateし、IntelliJを再起動する

サンプルCorDappsの実行

サンプルCorDappsのダウンロード

▼適当なディレクトリを作成して移動

mkdir corda-sample && cd corda-sample

▼サンプルリポジトリの複製

git clone https://github.com/corda/samples

▼ディレクトリの移動

cd samples/cordapp-example

IntelliJで開く

▼IntelliJを開く
▼「Open」>「cordapp-example」を選択し「Open」を選択
image.png

▼「File」>「Project Structure」を選択
image.png

▼「Project」>「Project SDK」でJDKを選択し「Apply」を選択
image.png

▼「Modules」>「+」>「Import Module」
image.png

▼「cordapp-example」>「Open」
image.png

▼「Import module from external model」>「Gradle」>「Next」
image.png

▼「Finish」>「OK」
image.png

▼しばし待つ(Gradleの依存関係のダウンロードのため)
image.png

サンプルの実行

サンプルを実行する方法は2つ。

  • ターミナル経由
  • IntelliJ経由

今回は、ターミナル経由で検証します。

サンプルCorDappの構築

▼cordapp-exampleを開く

$ pwd
~/corda-sample/samples/cordapp-example

▼ノードの構築

$ ./gradlew deployNodes

〜略〜

Bootstrapping complete!

BUILD SUCCESSFUL in 1m 25s
18 actionable tasks: 17 executed, 1 up-to-date

▼中身確認

$ ls -1 workflows-kotlin/build/nodes/
Notary
Notary_node.conf
PartyA
PartyA_node.conf
PartyB
PartyB_node.conf
PartyC
PartyC_node.conf
runnodes
runnodes.bat
runnodes.jar
$ ls -1 workflows-kotlin/build/nodes/PartyA
additional-node-infos
certificates
corda.jar
cordapps
drivers
logs
network-parameters
node.conf
nodeInfo-<HASH>
persistence.mv.db
persistence.trace.db

※nodesフォルダ内の説明は公式参照

実行

▼ノードの起動
コマンド実行後、複数タブが開かれますが、作業が完了するまでタブをいじってはいけません。

$ workflows-kotlin/build/nodes/runnodes

▼新規に3つタブを開く
※こんな感じで複数タブを開きます
image.png

▼Spring Bootサーバ起動
上記で新しく開いた各タブで実行。
いつになっても100%にならないので、気にしないこと。

タブ1

$ ./gradlew runPartyAServer
Starting a Gradle Daemon (subsequent builds will be faster)

> Task :clients:runPartyAServer
[INFO ] 14:01:56.247 [main] ServerKt.logStarting - Starting ServerKt on MacBook-puro.local with PID 36267 (/corda-sample/samples/cordapp-example/clients/build/classes/kotlin/main started by nobkovskii in /corda-sample/samples/cordapp-example/clients)

〜略〜

<============-> 96% EXECUTING [9m 40s]
> :clients:runPartyAServer

タブ2

$ ./gradlew runPartyBServer
Starting a Gradle Daemon (subsequent builds will be faster)

〜略〜

<============-> 96% EXECUTING [9m 40s]
> :clients:runPartyBServer

タブ3

$ ./gradlew runPartyCServer
Starting a Gradle Daemon (subsequent builds will be faster)

〜略〜

<============-> 96% EXECUTING [9m 40s]
> :clients:runPartyCServer

動作確認

▼ブラウザにアクセスする
http://localhost:port番号/
各情報は、デフォルトであれば、下記の通り

Server Port O L C
A 50005 PartyA London GB
B 50006 PartyB New York US
C 50007 PartyC Paris FR

image.png

▼「Create IOU」を選択
※IOU(I Owe You)は、借用証明書の意。

image.png

▼「Counter-party」と「Value」を入力し、「Create IOU」を選択
※Valueの上限は「100」の模様
image.png

数秒後、アラートでトランザクション完了の表示
※エラーが発生した時も、このアラートで表示される。
※「Counter-party」を空欄で実行すると、エラーっぽく表示されないけど、クエリとしては失敗している
image.png
image.png

▼各画面リロード
「Counter-party」で選択したノードにも「Recorded IOUs」が追加されている
image.png

※「Create IOU」で少し遊ぶ
A-Bのやり取りは、トランザクションに関与していないCからは見えない。
同様に、A-CはBが、B-CはAが不可視となる。
image.png

おわりに

今回は、Cordaのサンプルを動かしてみました。
裏側は全く意識せずに本当に上っ面だけしか触っていませんが、環境構築〜サンプル実行までが簡単で、お試しでやるのには良さげです。

私が元々Java屋ということもあり、JVM言語で書けるのも、個人的に高評価♪
次回は、もう少し踏み入った事をやってみようと思います。

以上です。
ありがとうございました。

P.S.
IntelliJの設定とか、今回のサンプル動かすだけだったら、いらなかったんじゃないかと思う今日このごろ。

参考

5
3
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?