ブロックチェーンテクノロジを使用したグローバルファイナンスアプリケーションは、購入者、販売者、プロバイダ、荷送人、および金融会社など、ネットワークのさまざまなメンバーによる注文に対するアクションを追跡します。 これらのアクションは次のとおりです。
- バイヤーが注文を作成します
- 売り手は商品の提供元に連絡します
- 荷送人は商品を配達します
- 金融会社は売り手への支払いを処理します
このユースケースは商品購入などに伴い揉め事が発生した際の解決に対処でき、業界のあらゆる分野に適用できます。 ここではBob DillによるRedBookチュートリアル use case より、同じアプリケーションインターフェースを使用しています。 このユースケースでは、Node.jsスマートコントラクトとNode.js Webアプリケーションを使用しています。
このCode Patternは、IBM Blockchain Platform Extension for VS Codeを使用してNode.jsスマートコントラクトをパッケージ化する方法を示しています。 次に、この拡張機能を使用して、Hyperledger Fabricネットワークのローカルインスタンスをセットアップし、その上にコントラクトをインストールしてインスタンス化できます。 Node.js Webアプリケーションは、 'fabric-network' sdkを使用してネットワークと対話できます。
このCode Patternを一通り完成させると、以下のことが理解できます。
- Node.jsスマートコントラクトの開発
- VS Code用 IBM Blockchain Platform Extensionを使用し、スマートコントラクトをパッケージ化した、Hyperledger Fabric ローカルインスタンスへのデプロイ
- デプロイされたFabricネットワークとやり取りするためのNode.jsブロックチェーンWebアプリケーションの開発
Note: 注:スマートコントラクトを代わりにIBM Blockchain Platform(IBM Cloud上)にデプロイするには、この コードパターン に従ってください.
VS Code用のIBM Blockchain Platform Extensionを使用して、以下のことを行います。
- スマートコントラクトをパッケージ化します。
- ローカルのHyperledger Fabric Networkを起動します。
- ピアノードにチェーンコードをインストールします。
- ピアノードでチェーンコードをインスタンス化します。
- Global Financeアプリケーションを使って、
fabric-network
npmライブラリを使ったAPI呼び出しを通してHyperledger Fabricネットワークとやり取りします。管理者はアプリケーションを使用して新しい参加者を作成することもできます。
- IBM Blockchain Platform Extension for VS Code は、Hyperledger Fabric環境への接続を含む、スマートコントラクトの開発、テスト、および展開を支援するように設計されています。
- Hyperledger Fabric v1.4 は、高度な機密性、回復力、柔軟性、およびスケーラビリティを提供するモジュラーアーキテクチャーに支えられた分散型元帳ソリューションのプラットフォームです。
- Visual Studio Code は、最新のWebおよびクラウドアプリケーションの構築およびデバッグ用に再定義および最適化されたコードエディタです。
- Node.js は、サーバーサイドのJavaScriptコードを実行する、オープンソースのクロスプラットフォームのJavaScriptランタイム環境です。
- Bootstrap は、HTML、CSS、およびJavaScriptで開発するためのオープンソースのツールキットです。
このコードパターンを設定して実行するには、次の手順に従います。 ステップの詳細は以下のとおりです。
下記 IBM Blockchain Platform Extension for VS Code の要件に従う必要があります:
- VSCode version 1.38.0 or greater
- Node v8.x or v10.x and npm v6.x or greater
- Docker version v17.06.2-ce or greater
- Docker Compose v1.14.0 or greater
- Clone the repo
- Use the VS Code extension to set up a smart contract on a basic Fabric network
- Run the application
任意のフォルダにリポジトリをCloneします:
git clone https://github.com/IBM/global-financing-blockchain.git
Visual Studio Code を開き contract
フォルダを開きます。
VS Codeの他のオプションを見るために F1
キーを押してください。
その中から IBM Blockchain Platform: Package Open Project
を選択します。
左側の IBM Blockchain Platform
拡張ボタンをクリックしてください。 これにより、パッケージ化されたコントラクトが一番上に表示され、ブロックチェーン接続が一番下に表示されます。
LOCAL FABRIC OPS
のメニューをクリックし Start Fabric Runtime
を選択してネットワークを起動します。 これにより、ローカルのFabric設定に必要なDockerイメージがダウンロードされ、ネットワークが起動します。 ネットワークが設定されると、出力ウィンドウが表示されます。
エディターの左側に FABRIC ENVIRONMENTS
が表示されます。 このセクションの下に Local Fabric
が表示されます。 それをクリックして、ローカルファブリックを起動します。
拡張機能は、ネットワーク内のノードとして機能するDockerコンテナーをプロビジョニングします。 プロビジョニングが完了し、ネットワークが稼働すると、スマートコントラクトをインストールしてインスタンス化するオプション、 Channels
の情報、 Nodes
の下のピア、そして Organizations
の下の organization msp が表示されます。 これで、スマートコントラクトをインストールする準備ができました。
*下部にある FABRIC ENVIRONMENTS
セクションで、 Smart Contracts
> Installed
> + Install
をクリックします。 次の図のようなポップアップが表示されます。
*次に、パッケージ化されたコントラクトを選択します:globalfinancing@0.0.1 Packaged
注 0.0.1は、 package.json
からです。 Line: "version": "0.0.1"
インストールが完了すると、 Successfully installed on peer peer0.org1.example.com
というメッセージが表示されます。 また、contractが FABRIC ENVIRONMENTS
の下の Installed
の下にリストされていることを確認してください。
-
Smart Contracts の下に、 Instantiated というセクションが表示されます。 その下の
+ Instantiate
をクリックします。 -
Extensionは、インスタンス化するコントラクトとバージョンを尋ねます。
globalfinancing@0.0.1 Installed
を選択します。
- Extensionは、インスタンス化時に呼び出す関数を尋ねます。
instantiate
と入力します
- 次に、関数の引数を尋ねます。 ここでは引数は不要なので、何も入力せずにエンターキーを押してください。
- 次に、Extensionは、プライベートデータコレクションの構成ファイルを提供するかどうかを尋ねます。
No
をクリックします。
- 最後に、Extensionはスマートコントラクトのエンドースメントポリシーを選択するかどうかを尋ねます。
Default (single endorser, any org)
を選択します。
コントラクトのインスタンス化が完了すると、 Successfully instantiated smart contract
というメッセージが表示され、 FABRIC ENVIRONMENTS
の下の Instantiated
の下に globalfinancing@0.0.1
が表示されます。
ここで、CA(認証局)ノードを使用してidentityを作成します。 アプリケーションを認証して実行するには、identity情報とキーファイルが必要です。
左側のペインの FABRIC ENVIRONMENTS
セクションで、 Nodes
を展開し、 ca.org1.example.com
を右クリックします。 Create Identity(register and enroll)
を選択します。
表示された入力ボックスに User1@org1.example.com
を入力しEnterを押します。
Extensionは、このidentityに属性を追加するかどうかを尋ねます。 No
をクリックします。
Once the identity is successfully created, you should get the message Successfully created identity 'User1@org1.example.com'
. You can now see User1@org1.example.com
in the FABRIC WALLETS
section under Local Fabric Wallet
.
identityが正常に作成されると、 Successfully created identity 'User1@org1.example.com'
というメッセージが表示されます。 これで、 Local Fabric Wallet
の下の FABRIC WALLETS
セクションに User1@org1.example.com
が表示されます。
FABRIC WALLETS
の下で、 Local Fabric Wallet
を右クリックし、 Export Wallet
を選択します。
エクスポート先は任意の場所で結構です。
エクスポートされたディレクトリから、 User1 @ org1.example.com
のフォルダを、このリポジトリを複製したディレクトリ内の次の場所にコピーします。
/global-financing-blockchain/web-app/controller/restapi/features/fabric/_idwallet/User1@org1.example.com
これでアプリケーションを実行する準備が整いました。
新しいターミナルで web-app
ディレクトリへ移動します:
cd global-financing-blockchain/web-app/
Build the node dependencies:
npm install
Run the application:
npm start
Unified member's view:
- もしこのようなエラーが発生した場合:
error: [Remote.js]: Error: Failed to connect before the deadline URL:grpc://localhost:17051 error: [Network]: _initializeInternalChannel: Unable to initialize channel. Attempted to contact 1 Peers. Last error was Error: Failed to connect before the deadline URL:grpc://localhost:17051
このエラーは、connection.jsonファイルでオーダー/認証局/ peerに使用されているポートが、VS Code用のIBM Blockchain Platform Extensionのsettings.jsonファイルでデフォルトのポートとして指定されているものと同じではないために発生したものです。settings.jsonファイルに指定されているものと一致するように、connection.jsonファイル内のポートを更新する必要があります。
左端にある歯車アイコンのボタンをクリックし、Settings
を選択します。左側のナビゲーションパネル内のExtensions
が展開され、"Settings"タブが新しく開き、Blockchain configuration
を選択します。Edit in settings.json
をクリックしてBlockchain platform extension用のsettings.jsonファイルを開きます。次のような内容が記載されていることが確認できると思います:
{
"ibm-blockchain-platform.fabric.runtime": {
"ports": {
"orderer": 17053,
"peerRequest": 17057,
"peerChaincode": 17058,
"peerEventHub": 17059,
"certificateAuthority": 17060,
"couchDB": 17061,
"logs": 17062
},
"developmentMode": false
},
"ibm-blockchain-platform.fabric.wallets": [],
"ibm-blockchain-platform.fabric.gateways": []
}
あなたのプロジェクト用のconnection.jsonファイルの中のorderer、peerそしてCAポートをこのsettings.jsonファイルで指定された orderer
、 peerRequest
そして certificateAuthority
ポートに置き換えてください。
このアプリケーションは、いくつかの方法で拡張できます。
- すべてのメンバーのためのWalletを作成し、アプリケーションと対話するためにメンバーのWalletを使用してください。
- IBM Cloud上のIBM Blockchain Platformスターター・プランを通じて対話するようにアプリケーションを更新します。
このCode Patternは、Apache Software License、Version 2の下でライセンスされています。このCode Pattern内で呼び出される個別のサードパーティコードオブジェクトは、それぞれのプロバイダによって、独自の個別のライセンスに従ってライセンスされています。 Contributions are subject to the Developer Certificate of Origin, Version 1.1 (DCO) and the Apache Software License, Version 2.