空谷に吼える

ブロックチェーン/DLTまわりのなにかしらを書いていく所存

Oracle Blockchain Cloud Serviceのインスタンスを作成してサンプルChaincode動かしてみた

ひさびさに筋トレをしたら全身がむちゃくちゃな筋肉痛になりました、身動きがとれない、ふとんから出られなーい

やったこと

  • Oracle Blockchain Cloud Service(OBCS)のインスタンスを作成
  • OBCSに含まれるサンプルChaincodeをインストールして実行

内容

Oracle Cloud Advent Calender 2018の16日目のやつとしてOracle Blockchain Cloud ServiceのリッチヒストリーDB連携のエントリ書こうと思ったんだけど、なんか書いてたら長すぎるので事前準備編を別エントリとして書くことにしました、そしてこのエントリがその事前準備編その1です。

ここではOracle Blockchain Cloud Serviceのインスタンスを作成し、その後サンプルChaincodeを動かしていきます。

Oracle Blockchain Cloud Serviceとは

Oracle Cloudで提供されるHyperledger FabricベースのPaaSです、略称はOBCSなのでよろしくな。こちらにご紹介がありますので見てくださいませ

www.slideshare.net

インスタンス作成

まずOracle Cloudにログインするじゃろ、そんで左のほうにあるメニューバー的なやつからAutonomous Blockchainというのを選びます、そんでBlockchain Cloud Serviceのサービス画面に行くのでここでインスタンス作成」ボタンを押しますね

f:id:gakumura:20181215140625p:plain

そうすると↓の構成設定画面になります。いくつかの設定をします

f:id:gakumura:20181215141109p:plain

  • Instance Nameには任意のインスタンス名を入れましょう。使えるのはアルファベット小文字と数字のみです。また、インスタンス名がそのままHLFのOrganization名になるのでそのつもりで
  • Create a new Networkにチェックをつけると、インスタンス作成時に新しいHLFネットワークを作成します。既存のHLFネットワークに参加させたい場合はチェックを外しましょう。このエントリでは単独OrgのHLFネットワークを新たに作成したいのでチェックを入れておきます。
  • Configurationはシェイプ的なものを選ぶところです。割り当てられるCPU,メモリなどのリソース量、VMの冗長構成、作成できる最大Peer数、1時間あたりの最低課金単位量に関わってきます。このエントリでは特にそのあたりの要件ないので、一番最低課金が安いDeveloperを選びます。

「次へ」ボタン押すと確認画面に遷移するので、確認したら「作成」ボタンを押しましょう。無事インスタンス作成リクエストが通ると以下のようにCreating service...になります、待ちましょう。だいたい5分~40分くらいで終わると思う

f:id:gakumura:20181215142502p:plain

待っている間に公式ドキュメントでも読むか、、、というひとは↓にありますので存分に読みましょう

Oracle Blockchain Platform - Get Started

インスタンス作成完了~ブロックチェーンコンソール画面

インスタンス作成が終わりましたね?そうしたらBlockchain Cloud Serviceのサービスページから、できあがったインスタンスの右のほうにあるハンバーガーメニューをクリックし、「Blockchain Console」をくりっくくりっく

f:id:gakumura:20181215143525p:plain

このような↓ダッシュボード画面が開きます、やったぜ

f:id:gakumura:20181215144008p:plain

いちいちサービスページから遷移してくるのも面倒なので、このページをブックマークしておくのがおすすめです。

このコンソール画面から他のOrganizationをネットワークに参加させたり、Peerを追加したり削除したり起動停止したり、各種設定を変更したり、ブロックを眺めたりといろいろなことができるというわけじゃよ

どういうことができるかは前述の公式ドキュメントを読んでもいいですが、↓の動画がわかりやすくておすすめです

www.youtube.com

サンプルChaincodeを動かしてみる

ここからはOBCSでかんたんに試せるように用意されている、サンプルChaincodeを動かしてみます。

チャネルの作成

まずはチャネルを作成しましょう。OBCSのダッシュボードから、Channelsのタブを選択します

f:id:gakumura:20181216142852p:plain

チャネル一覧画面が表示されます。最初からdefaultチャネルが用意されていますが、このチャネルはChaincodeをインストールしたりする用途には使うべきでない特殊なチャネルです。新しくチャネルを作成しましょう。Create a New Channelをクリック

f:id:gakumura:20181216143028p:plain

↓のフォームが出ます。Channel Nameには任意のチャネル名を記載し、Peers to Join Channelにはひとつ以上のPeerを選択してSubmitしましょう。「チャネル作ると消せないけどおk?」という確認ダイアログが出たらYesしてください。

f:id:gakumura:20181216143432p:plain

Submit後、ちょっと待ったらリロードしてみましょう。1分くらいでチャネルができあがります。

f:id:gakumura:20181216143837p:plain

これでチャネル作成は完了です、かんたんですね

サンプルChaincodeのインストールとインスタンス

次はサンプルChaincodeをインストールして動かしてみます。Developer Toolsタブをクリックし、左のSamplesメニューをクリックすると↓の画面が表示されます。Balance TransferのサンプルChaincodeのInstallボタンを押しましょう。

f:id:gakumura:20181216144438p:plain

↓のフォームが出ます。Peersには先ほどチャネルに所属させたPeerのうちひとつ以上を選んでください。そんでInstallボタン

f:id:gakumura:20181216144845p:plain

Installed on Peersの数字が増えていますね。次にこのChaincodeをチャネル上でインスタンス化しましょう。Instantiateボタンをクリック

f:id:gakumura:20181216145150p:plain

Channelは先ほど作成したチャネルを選択、Initial Parameters of ChaincodeのBalance of A、Bにはそれぞれ任意の自然数を入力しましょう。これらがA,Bそれぞれの初期アカウント残高になります。REST Proxyはrestproxy1~4のどれかひとつを選択してください。サンプルChaincodeのInvokeをREST経由で行っているため必要になるものです。そんでInstantiate and Enable in REST Proxyボタンをくりっくくりっく

f:id:gakumura:20181216160254p:plain

リクエストが通った旨の↓のようなメッセージが出るのでフォームを閉じましょう。

f:id:gakumura:20181216160719p:plain

サンプルChaincodeの実行

インスタンス化したことにより、Instantiated on Channelsの数字が増えています。チャネル上で有効になり、Chaincode実行の準備が整いました。ということで実行しましょう。Invokeボタンをクリック

f:id:gakumura:20181216160907p:plain

Channelは先ほどInstantiateしておいたチャネルを選択。ActionはとりあえずQuery AのままExecuteボタンで実行!

f:id:gakumura:20181216161237p:plain

戻ったSamples画面の下部にChaincode実行=トランザクションの結果が表示されます。先ほどActionをQuery Aにしたので、Aのアカウント残高である100(Instantiate時に設定しておいたBalance of Aの値)が表示されました。やったぜ

f:id:gakumura:20181216161459p:plain

先ほどど同様、Invokeの画面からActionを指定することで、アカウントA/Bの残高クエリおよびAからB、BからAの残高移動が行えます。いずれも結果はSamples画面下部に表示されます。いろいろ試して遊んでみてください。

f:id:gakumura:20181216161755p:plain

トランザクション履歴の確認

ここまででサンプルChaincodeを実行したことにより、当該チャネルの台帳にはトランザクション履歴が発生しているはずです。HLFでトランザクション履歴が格納されているのは、、、そう、みんな大好きブロックチェーン部分ですね。見ましょう

Channelsタブに移動してチャネル一覧画面でChaincodeを動かしたチャネルのチャネル名の部分のリンクをクリック

f:id:gakumura:20181216162908p:plain

Ledgerのページが表示されます。User Transactionが1(以上)になっているBlockの行をクリックしてみましょう。

f:id:gakumura:20181216163339p:plain

ページ下部に選択したBlockに含まれるUser Transactionの一覧が表示されます。各トランザクションの行の左側にある三角形のマークをクリックすると↓のように詳細が表示されるでよ

f:id:gakumura:20181216163806p:plain

ということでけっこうかんたんにChaincodeを動かしてそのトランザクション履歴を見られました、よかったですね