Oracle Blockchain Cloud Service（OBCS）を使ってみたら、まじ「ネ申」だった。

# 1.概要
Oracle Blockchain Cloud Service（OBCS）を使ってみたので、その手順をまとめた。
CLIでの作業と比べ、Dockerファイルの書き換え等が発生しないので、個人的には、精神的負担が少なく、お手軽に実施できた。
まじ、「ネ申」。

この記事では、OBCSでのHLFのPeerの追加までを駆け足で紹介していきます。

# 2.Oracle Blockchain Cloud Service（OBCS）とは
Oracle Cloudで提供されるHyperledger FabricベースのPaaSです。
略称はOBCS。

■紹介スライド
https://www.slideshare.net/oracle4engineer/oracle-blockchain-cloud-service20181213-125784996

# 3.アカウントの作成
手順は省略。
$300クレジット付きの無料があるので、そちらを試用すると良さげ。

https://myservices.us.oraclecloud.com/mycloud/signup?language=en&sourceType=_ref_coc-asset-opcHome

# 4.マイ・サービス・ダッシュボードへアクセス
▼Oracle Cloud Infrastructureへアクセス
https://console.ロケーション.oraclecloud.com/

▼左側メニューから「マイ・サービス・ダッシュボード」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/62439e1f-788a-45fb-75a7-da70da3d17b3.png)

# 5.インスタンスの作成
▼「インスタンスの作成」を選択
▼「すべてのサービス」から「Blockchain Platform」の作成を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/ff1b6851-5989-20ad-4739-eaee4378fb86.png)

▼「Custom」ボタンを選択
クイックスタートかカスタムを選択します。
HLFネットワークを新規に作成する場合は、カスタムを選択します。
今回はカスタムで作成します。
インスタンスの構成については、公式ドキュメントを参照ください。
https://docs.oracle.com/en/cloud/paas/blockchain-cloud/administer/create-oabcs-instance.html#GUID-84E28529-A879-4BC9-81D1-60C2B679C0C3
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/aeb20115-2c1a-1f8c-9ede-f478bd44f136.png)

| 項目  |  説明 | 
|---|---|
| Instance Name |   任意のインスタンス名。 |
||アルファベット小文字と数字のみ。|
||インスタンス名がそのままHLFのOrganization名になる。|
| Create a new Network  | チェックをつけると、インスタンス作成時にHLFネットワークを作成する。|
||既存のネットワークに参加させる場合は、チェック不要。|
|Configuration | インスタンスの構成|

▼「Instance Name」に任意のインスタンス名を入力
▼「Create a new Network」にチェック
HLFネットワークを作成するため
▼「Configuration」は、「Developer」を選択
一番安いので・・・
▼「次へ」を選択
確認画面へ遷移する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/a52c5203-bef9-a6d8-17f4-82df5e85a49f.png)

▼「作成」ボタンを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/9c23bf51-0ead-dec7-5c57-424074bfd15e.png)

▼しばし待つ（5分〜40分？）
※作成ボタンを押しても「The request timed out. Try again later.」となり、作成できなかった。（2019/04/08 15:00頃）
（エラーが出てもめげずに、作成をポチポチ押していると）インスタンス構築完了メールが飛んでくる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/9888dce5-339a-4317-9401-8e1e99d66b68.png)

▼左メニューから「サービス」＞「Blockchain Platform」へ遷移
作成されていることが確認出来る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/0c166636-82d7-1d7f-b1d4-1cc0691ee017.png)

# 6.ブロックチェーンコンソール
▼インスタンスのメニューから「Blockchain Console」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/11471f13-0de4-df95-6015-248d0ec9be74.png)

▼別タブで、選択したインスタンスのGUIコンソール（ダッシュボード）が開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/cba6ba11-1538-568c-13b0-d7055a596ab4.png)

# 7.チャネルの作成
デフォルトで存在している「default」チャネルは、チェーンコードのインストール等の用途には使うべきではない特殊なチャネル。
作業が必要な場合は、新しくチャネルを作成する事が望ましい。

▼Channelsを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/d2392eb0-2e04-f86e-1c55-eff475c2eba6.png)

▼Create a New Channel を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/b4538ad1-d5e9-97c9-1310-53fae1c6cbd8.png)

▼フォームを入力し、「Submit」を選択

|項目|説明|
|---|---|
|Channel Name|任意のチャネル名。半角英数字のみ|
|Application Capabilities|v1.3：OracleBlockchainPlatformインスタンス v19.1.1以下は使用不可|
||v1.1：Hyperledger Fabric v1.2、v1.3の機能の使用不可|
|Organizations|ReaderOnly：チェーンコード実施不可|
||ReaderWriter：チャネル作成の組織はこちらを選択|
|Peers to Join Channel|チャネルに参加させるPeer|
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/1518646e-f6ae-3595-e071-990934d1704c.png)

▼「Yes」を選択
作成したチャネルは削除できない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/0067bd0b-0d12-947f-8950-de85db59840c.png)

▼画面リロード
約1分程度でチャネルが作成される。
おそらく、画面リロード必要。
「チャネル作成」完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/621411c0-9288-063a-e01b-e2a63da02cfe.png)

# 8.サンプルチェーンコードのインストール／インスタンス化／実行
サンプルで提供されているチェーンコードをインストールし、インスタンス化、そして実行まで行います。

■インストール
▼「Developer Tools」＞「Samples」＞「install」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/353e0b87-f6d8-a93b-2b1a-289441499561.png)

▼フォームを入力し、「install」を選択

|項目|説明|
|---|---|
|Peers|チェーンコードをインストールするPeerを選択する|
|Language|Go：デフォルト|
||全てのPeerは同じ言語を選択する必要がある|
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/5e3ed141-e104-4774-14ba-e564b52e5d25.png)

■インスタンス化
Installed on peersが増えている。
▼instantiateを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/211443c8-a625-3f7c-2073-5faef2ab973f.png)

▼フォームを入力し、「Instantiate and Enable in REST Proxy」を選択

|項目|説明|
|---|---|
|Channel|チェーンコードをインスタンス化するチャネルを選択|
|Initial parameters of chaincode|初期アカウント残高を設定|
|REST Proxy|サンプルチェーンコードのInvokeをREST経由で行っているため設定|

▼リクエストが通っているようであれば、☓ボタンでフォームを閉じる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/c43c20bf-4298-634c-dc98-8ff749913438.png)

■実行
Instantiated on channelsが増えている。
▼Invokeを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/d70499c0-baa9-3cbd-7850-e06ac814a0e6.png)

▼Channelは、インスタンス化したチャネルを選択し、Executeを選択
画面下部にチェーンコード実行（トランザクション）の結果が表示される。

|項目|説明|
|---|---|
|Transfer from A to B|AからBへ送金する|
|Transfer from B to A|BからAへ送金する|
|Query A|Aの残高を確認する|
|Query B|Bの残高を確認する|
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/f84be5b4-db7f-8ebe-5489-3ebc08365f0d.png)

# 9.	トランザクション履歴の確認
前章の実施により、当該チャネルの台帳にはトランザクション履歴が発生している。
Hyperledger Fabric でトランザクション履歴が格納されているのが「ブロックチェーン」部分。

▼「Channels」＞「作成したチャネル」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/1b3421cd-01e7-2f48-594e-4c6874a5da39.png)

▼User Transactionが１以上になっているBlockの行を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/65c928b2-3cbd-d1f7-dd07-5d5d3abf702f.png)

▼画面下部にUserTransactionの一覧が表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/f5f37b00-0155-a2cd-b51a-c885ed810305.png)

# 10.Orgの追加
組織（Org）を追加してみます。
組織の追加には証明書が必要になります。
現在の状態では、RoleがFounderだけのため、証明書をエクスポートして使い回すことはできません。
なので、新規にインスタンスを作成し、その組織をインポートする方式を取ります。
※別途、サードパーティのCAから証明書を作成するなどの方式がありますが、Orderer／Peerの追加が行えないため、今回はこの方式をとります。

## 10.1.新規インスタンスの作成
「5.インスタンスの作成」と同様に、インスタンスを作成します。
今回は、Hyperledger Fabric ネットワークは不要なので、チェックは外しておきます。

▼「インスタンスの作成」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/b26b209c-7243-67b3-5da2-b3077b455191.png)

▼「Instance Name」を入力、「Create a new Network」のチェックを外し、「次」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/08def022-6692-19f7-8731-da254b4b7bcb.png)

▼確認画面が出てきたら「作成」を選択し、しばし待つ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/fd6cb746-1219-7a1b-dd0f-6453a0917df0.png)

## 10.2.証明書のエクスポート
▼新規作成したインスタンスのBlockchainConsoleに遷移。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/303590c3-1bf0-7bcf-6c3b-7216ab8de2ff.png)

▼Certification JSONファイルをエクスポートする
促されるまま、エクスポートする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/ee087722-4b00-f534-a201-7650109a9d92.png)

▼インポート対象のインスタンスへ移動する
Founderのインスタンス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/572d908e-11f0-b64a-7f99-e7269f4fc706.png)

## 10.3.Orgの追加
▼「Add Organizations」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/cffed91c-d369-4b3a-449b-d6ed4f7b9ea2.png)

▼「Upload Organization Certifications」を押下し、ダウンロードしたjsonを選択。その後「Add」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/5823831f-5d12-dc76-28e9-fbd0bee9fd11.png)

▼「Finish」でモーダルを閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/b5a95bf6-a65d-f103-b8fd-6644d424fd1f.png)

無事、Orgが作成されています。
ちなみに、画面上部のアイコンを押下すると、リスト表示と関係性表示？を切り替えることが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/ed9ea3b8-b47d-5ce7-a07b-929692e7c0c1.png)


# 11.Peer
## 11.1.追加
▼「Nodes」へ移動＞「Add Node」＞「Peer」を選択
Peerの数は「２」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/86780cae-1aa2-41c4-863c-aeca92ebed75.png)

▼「Advanced Attributes」を選択し、トグルを開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/09798498-9376-ce4a-4bca-c362ec9da4ba.png)

▼「Bootstrap Peers」で（Peer0）を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/7ab34ca9-61ac-1e21-cd86-1fcf9cd26f5e.png)

▼「Submit」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/7aa55c0c-9096-f45a-a73b-c3e63450399a.png)

▼確認
Peerの数が「３」になっている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/eef271c9-5ce3-406c-96b7-51a23a787c54.png)

## 11.2.Channelへの追加
▼当該Peerを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/5b5f8930-fda4-3fbc-636f-984fe0978ff2.png)

▼Channelsを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/2316eb42-9dbf-d630-d0cb-50bf13da7744.png)

▼「Join New Channels」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/026dec15-61af-c412-83b1-386393c41d84.png)

▼追加するChannelを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/dc5dcd87-9664-e030-8ebd-84bfaee4d92f.png)

▼「Join」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/51fb0e17-26fd-58de-0892-a6ec5b27cf8e.png)


▼追加されている
※表示まで１分程度のラグあり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/2590e32b-c362-0cb2-6cc0-f0371197fc26.png)


# 12.課金周りの話
* 500トランザクション／時間：60円
  * 0トランザクションでも、1時間あたりのトランザクション料は発生する
  * 1,440円／日は、最低費用。
      * 約43,200円／月／１インスタンス
  * 各Peerの内部トランザクションも課金対象
      * と、やはり便利なものには、それなりの費用がかかる。

# 13.参考
公式ドキュメント（英語）
https://docs.oracle.com/en/cloud/paas/blockchain-cloud/index.html

空谷に吼える
「Oracle Blockchain Cloud Serviceのインスタンスを作成してサンプルChaincode動かしてみた」
https://gakumura.hatenablog.com/entry/2018/12/15/145558

Oracle Blockchain Cloud Service 触ってみた（Dataspiderとの連携もちょっと紹介）
https://qiita.com/Yosuke_Sakaue/items/159d86fb5022426d4bce


# まとめ

触り始めて、まだ1週間くらいですが、
「いままでCLIでDockerファイルいじって、Dockerコマンド打って、うまくいかなくて、タイポみつけて、がっかりしながら修正して・・・」
という、負のスパイラルからの脱却ができそうです。

ほんと、楽！！

やはり、エンジニアは巨人（神託）の肩に乗るべきです。
やめよう、車輪の再発明。

次回は、「独自のチェーンコードのデプロイ」「外部システムとの連携」あたりについて、書いていこうと思います。

今回はここまでです。
ありがとうございました。