はじめに
どーも、のぶこふです。
今回は、公式で提供されているサンプルを動かしてみようと思います。
ダウンロード
▼サンプルも色々あるので、特定のディレクトリのみダウンロードします。
※参考:「GitHubから特定のディレクトリだけを直接ダウンロード」
https://qiita.com/raucha/items/1219327df8a9ded494df
$ svn export https://github.com/corda/corda/tags/release/4.0/samples/bank-of-corda-demo/
▼ディレクトリ移動
$ cd bank-of-corda-demo/
▼設定ファイルの作成
$ ./gradlew samples:bank-of-corda-demo:deployNodes
-bash: ./gradlew: No such file or directory
「-bash: ./gradlew: No such file or directory」
…ファッ?!
▼闇に帰す
$ cd ../ && rm -rf ./bank-of-corda-demo
改めてダウンロード
▼今度は全部ダウンロードします
$ git clone https://github.com/corda/corda.git
起動
▼設定ファイルの作成
$ ./gradlew samples:bank-of-corda-demo:deployNodes
○おそらく、そこそこ時間がかかります。(BUILD SUCCESSFUL in 5m 43s
)
▼ノードの起動
$ ./samples/bank-of-corda-demo/build/nodes/runnodes
▼キャッシュ発行リクエストを実行1
$ ./gradlew samples:bank-of-corda-demo:runRPCCashIssue
▼別のキャッシュ発行リクエストを実行1
$ ./gradlew samples:bank-of-corda-demo:runWebCashIssue
▼Bank of Cordaノードの稼働確認
http://localhost:10007/api/bank/date
▼アプリ起動
$ ./gradlew tools:explorer:run
▼ログインする(Bank of Corda node)
Bank of Corda node | Big Corporation node | |
---|---|---|
Host | localhost | localhost |
Port | 10006 | 10009 |
Username | bankUser | bigCorpUser |
Password | test | test |
○アプリの詳細は、下記を参考
https://docs.corda.net/node-explorer.html
○一回目はうまく起動できたのに、二回目以降はログイン処理後ずっと起動失敗してる
$ ./gradlew tools:explorer:run
> Task :tools:explorer:run
[INFO ] 16:55:26,655 [JavaFX Application Thread] (ReconnectingCordaRPCOps.kt:188) internal.ReconnectingCordaRPCOps.establishConnectionWithRetry - Connecting to: [localhost:10009]
QUASAR WARNING: Quasar Java Agent isn't running. If you're using another instrumentation method you can ignore this message; otherwise, please refer to the Getting Started section in the Quasar documentation.
[INFO ] 16:55:28,152 [JavaFX Application Thread] (InternalUtils.kt:204) internal.RPCClient.logElapsedTime - Failed Startup took 507 msec
・・・
→デモの章の頭(▼設定ファイルの作成)から実施したら起動できた。
アプリデモ
UTXO方式をとっているので、Input→Outputの流れが普通の算数とはちょい違う。
500USDを持っているとしても、「500USD」なのか「250USD+250USD」なのか「12.3USD+456.7USD+8.9USD+22.1USD」なのかで意味合いは変わってくる。
詳しくは「UTXO」で検索してください(丸投げ)
処理は体感早め。
画面
左側のメニューから画面を切り替えられます。
Dashboard
・その名の通り、ダッシュボード。
・Transactions:押下するとTransactionsタブに遷移する
・Treasury:押下するとCashタブに遷移する
Transactions
・トランザクションの一覧
▼「+」を押下すると、詳細が表示されます
Cash
・トランザクションの作成
▼「+ New Transaction」押下でモーダルが立ち上がり、作成するトランザクションの詳細を入力します
Transaction Type | 説明 |
---|---|
Issue | 発行 |
Pay | 支払い |
Exit | 削除? |
Exitの用途がいまいちわからない。
公式ドキュメントを見ると、Exiting(Destroying)と書いてあるので、ですとろいするみたいです。
Network
Settings
・設定
▼右上の「Edit」のチェックボックスを外すと、編集が行えるようになります
▼ターミナルで別タブを新しく開き、アプリ起動(./gradlew tools:explorer:run
)することで、もう一方のユーザでログインすることも可能です。
トランザクションの作成
ということで、「BankOfCorda」でトランザクションを作成してみます。
発行(Issue)
▼「Cashタブ」>「+ New Transaction」>「Transaction Type:Issue」
▼「BigCorpration」へ「1000USD」発行
○無事終了するとメッセージが表示されます
○「BigCorporation」側のCashタブを見ると、1000USD発行(保持)されているのが確認できます。反対に、「BankOfCorda」では、自身のCashは保持していないので、表示されていません。
▼Transactionsタブへ遷移します
▼「+」を押下すると、詳細が開きます
画面左側が「BankOfCorda」、右側が「BigCorporation」です。
流れとしては「BankOfCorda」が1000USDを発行(Issue)して、「BigCorporation」へ譲渡(Move)しているのが、今回の処理の流れです。
支払い(Pay)
「BankOfCorda」はCashを保持していないので、「BigCorporation」で実行します。
※「BigCorporation」は権限の関係上「Pay」しか実行できません
▼「Cashタブ」>「+ New Transaction」>「Transaction Type:Pay」
▼「BankOfCorda」へ「750USD」支払い
○無事終了するとメッセージが表示されます。画面左側のTransactionsタブを見てもわかる通り、トランザクションが増えています。
○Transactionsタブを見てみます。
「BigCorporation」の「1000USD」から「750USD」を「BankOfCorda」へ支払い(Pay=Output)をして、おつりとして「250USD」を「BigCorporation」へ支払い(Pay=Output)しています。
簡単ですが、これがUTXOの特徴になります。
???(Exit)
発行したCashを、闇に帰すコマンドです。
用途としては、「発行したCashを別システム等のポイントに変換」などでしょうか。あまりユースケースが思いついていません。
「BankOfCorda」で実行します。
▼「Cashタブ」>「+ New Transaction」>「Transaction Type:Exit」
▼「BankOfCorda」から「100USD」を焼却
○無事終了するとメッセージが表示されます。画面左側のCashタブを見てもわかる通り、Cashの総額が減っています(750USD→650USD)。
○Transactionsタブでは、「BankOfCorda」側のみ「Exit」のトランザクションが増えています。
おまけ(UTXO)
自分自身へ支払い(Pay)をすることで、Cashを分割することができます。
▼「BankOfCorda」から「BankOfCorda」へ支払い(Pay)をします。
○Cashの内訳を見てみると「150USD」と「500USD」に分けられていることがわかります。
○Transactionsタブでも同様に、分割していることがわかります。
おわりに
今回は、公式のサンプルを動かしてみました。
ほぼほぼサンプルアプリの動作説明になってしまっているが・・・
GUIで操作ができると、視覚的にわかりやすいですし、操作も直感的で、とても良いですね。
Corda自身が金融系に特化しているとのことなので、今回のようにお金のやり取りするユースケースがメインとなるのでしょうね。
ユースケースも考えないとなーーー。
今回はこれで以上です。
ありがとうございました。