VS CodeとHyperledger Fabricでブロックチェーンテクノロジを使用したグローバルファイナンスアプリケーションを作る
Hyperledger Fabricとは
HyperledgerのProjectの一つで、オープンソースのプライベート型/コンソーシアム型ブロックチェーンプラットフォームです。EthereumやBitcoinなどのパブリック型ブロックチェーンと異なり、ブロックチェーンネットワークに参加出来るメンバーを限定したブロックチェーンテクノロジーになります。
また、スマートコントラクトというビジネスロジックを個別に実装できるので、様々なシナリオでの活用が可能です。認証局を立て、参加者を認証ベースでグループ分けしながらブロックチェーンネットワークを構築できるので、金融領域だけでなく、産業、食品流通、保険など、色々な場面で活用されています。
IBM Code Patternsから
今回はこのPatternを実際に試してみましょう。流れとしては以下の通りです。
- GitHubからリポジトリをClone
- VS CodeのExtensionを使いFabric ネットワーク上にスマート・コントラクトをセットアップ
- 認証の設定
- アプリケーションの実行
必要な環境、モノ
- VS Code version 1.26 またはそれ以降
- Node v8.x またはそれ以降
- npm v5.x またはそれ以降
- Docker version v17.06.2-ce またはそれ以降
- Docker Compose v1.14.0 またはそれ以降
IBM Cloudアカウントの作成
IBM CloudにはIBM(IBM Blockchain Platform)というHyperledger Fabricでのネットワークをクラウド上へ構築するツール・環境が用意されています。IBMはコンテナ及びKubernetes上で動作します。
今回はローカルのDocker環境で試しますが、クラウド上のコンテナ環境を使う事も想定し、IBM Cloudのアカウントを作成しましょう。初めて作成する場合は前述の通りライトアカウントになります。このままだとKubernetesが使えないのでPAYGアカウントへアップグレードしてください。すでにライトアカウントをお使いの方も同様にPAYGアカウントへアップグレードしてください。
PAYGアカウントは、いわゆる標準アカウントで有償のサービスも利用可能ですが、料金プランで無料のもののみを選んで使うこともできますので非常に便利です。もちろん無料のサービスのみを使っている分には一切課金されないのでご安心下さい。
アカウント登録はこちらから。
https://ibm.biz/Bdzce8
上部メニューからManage (管理) を選択します。
Account settingからAdd credit cardを選択するとPAYGアカウントへアップグレードできます。
アプリケーションアーキテクチャ概要図
こちらのPatternについては下記のリポジトリのREADMEを見れば良いのですが、CAのIdentityを作成しそのIdentity情報と鍵ファイルをローカル環境へコピーする手順が抜けています。本ブログでは、そこの手順も補完してますのでこちらに沿ってやって頂ければ問題無く動かすことができます。
※現在、本ブログで補完している内容でRepoオーナーにプルリクを送っている所です。Merge完了しましたら、GitHubの方を見ていただいてもよろしいかと思います。
2019/06/26 追記:
プルリクを送っていた内容がマージされました。これでオリジナルのGitHub RepoのREADMEを見ていただいてもここでの内容と同じ手順を確認できるようになりました。
1.リポジトリのクローン
任意のフォルダにリポジトリをCloneします:
git clone https://github.com/IBM/global-financing-blockchain.git
2.VS Code extension を使用して、基本的なFabricネットワークにスマートコントラクトを設定する
Visual Studio Code を開き contract
フォルダを開きます。
#スマートコントラクトをパッケージ化する
VS Codeの他のオプションを見るために F1
キーを押してください。 その中から IBM Blockchain Platform: Package a Smart Contract Project
を選択します。
左側の IBM Blockchain Platform
拡張ボタンをクリックしてください。 これにより、パッケージ化されたコントラクトが一番上に表示され、ブロックチェーン接続が一番下に表示されます。
#ローカルでファブリックを設定する
LOCAL FABRIC OPS
のメニューをクリックし Start Fabric Runtime
を選択してネットワークを起動します。 これにより、ローカルのFabric設定に必要なDockerイメージがダウンロードされ、ネットワークが起動します。 ネットワークが設定されると、出力ウィンドウが表示されます。
これで LOCAL FABRIC OPS
の下に、スマートコントラクトをインストールしてインスタンス化するためのオプション、あなたの Channels
の情報、 Nodes
の下のピア、そして Organizations
の下の organization msp が表示されます。 ※MSP(メンバーシップ・サービス・プロバイダ)については こちら をご覧ください。
#スマートコントラクトをインストールしてインスタンス化する
LOCAL FABRIC OPS
コンソールの Installed
ドロップダウンの下にある +Install
をクリックしてください。
こちらのピアを選択します: peer0.org1.example.com
.
globalfinancing@0.0.1
コントラクトを選択します:
スマートコントラクトのインストールが成功したことの通知と LOCAL FABRIC OPS
コンソールの Installed
の下にリストされているスマートコントラクトが表示されます。
これでスマートコントラクトをインスタンス化する準備が整いました。 LOCAL FABRIC OPS
コンソールの Instantiated
ドロップダウンの下の +Instantiate
をクリックしてください。
こちらのチャネルを選択します: my channel
.
globalfinancing@0.0.1
コントラクトを選択します:
関数に instantiate
と入力します:
オプションの引数については Enter を押すことができます。
これがうまくインスタンス化されると、アウトプットビューに成功した通知とあなたの LOCAL FABRIC OPS
コンソールの Instantiated
の下にリストされたスマートコントラクトが見えるはずです。
#CAノードにIdentityを追加する
GitHubからCloneしたソースコードの中にIdentityの情報や認証に使用する鍵ファイルも含まれていますが、ご自身の環境に合わせ書き換える(置き換える)必要があります。先ずは、CAノードにIdentityを追加します。 LOCAL FABRIC OPS
コンソールの Nodes
ドロップダウンの下の ca.org1.example.com
を右クリックして Create Identity
を選択してください。表示された入力ボックスに User1@org1.example.com
を入力しEnterを押します。
すると FABRIC WALLETS
コンソールの local_fabric_wallet
の配下に User1@org1.example.com
が追加されたのが確認できます。
#Walletをエクスポートする
追加したIdentityの情報をアプリケーションが認証に使えるようにするため、VS CodeのExtensionからWalletをエクスポートします。エクスポート先は任意の場所で結構です。ここではデスクトップに一旦保存しています。
アプリケーションが認証処理で参照するディレクトリに、エクスポートしたファイルをコピーします。対象のディレクトリは以下になります。 GitHubからCloneしたファイルが既に存在していますので、それらは削除して下さい。
/global-financing-blockchain/web-app/controller/restapi/features/fabric/_idwallet/User1@org1.example.com
これで、アプリケーションからブロックチェーンネットワークへの認証が可能になりました。
3.アプリケーションの実行
新しいターミナルで web-app
ディレクトリへ移動します:
cd global-financing-blockchain/web-app/
Build the node dependencies:
npm install
Run the application:
npm start
後は、localhostのインスタンスが起動したらWebブラウザからアクセスします。
アプリケーションが起動したらまずはじめにAdmin → Preload Networkを選択します。そうするとバックグラウンドで必要なネットワークをロードします。この状況はnpm startしたコンソールで確認できます。
次に、Roles→load Unified User Experienceを選択します。
各ピアのセクションが表示されるので、Create New OrderやDisplay Order Statusのボタンを押してみて、実際にトランザクションが実行されることを確認します。
今回は、このように簡単にブロックチェーンアプリケーションが作成できることを体験してみました。IBM Cloud上でIBP(IBM Blockchain Platform)を使用すれば、さらに簡単にクラウド上のコンテナ環境上へ同様のブロックチェーンネットワークを構築することが可能です。ぜひ試してみてくださいね。
――――――――――――――――――――――――――――――――――――――
Information
IBM Developer Dojo
https://ibm-developer.connpass.com/
IBM Code Patterns
http://developer.ibm.com/jp/
IBM Developer Advocate Profile
https://developer.ibm.com/code/community/advocates/taijih
Cloud Developers Circle
(ベンダー依存しないクラウドデベロッパーのためのコミュニティ)
https://cdevc.connpass.com/
Node-RED ユーザーグループ
https://node-red.connpass.com/
IBM Cloud ユーザーグループ
https://bmxug.connpass.com/
DevRel Meetup in Tokyo
https://devrel.connpass.com/