Visual Studio Codeを使用したチェーンコードのデプロイ

チェーンコード・プロジェクトが作成されると、自動的に生成されたHyperledger Fabricネットワークにローカルにデプロイするか、Oracle Blockchain Platform CloudまたはEnterprise Editionにリモートにデプロイできます。チェーンコード・プロジェクトをパッケージ化して、Oracle Blockchain Platformに手動でデプロイすることもできます。

ローカルHyperledger Fabricネットワークへのチェーンコードのデプロイ

チェーンコード・プロジェクトを作成したら、ローカルHyperledger Fabric基本ネットワークでテストできます。

VS Codeのブロックチェーン・アプリケーション・ビルダー拡張機能をインストールすると、単一のチャネルを使用してHyperledger Fabricネットワークが自動的に作成されます。これは、「環境」ペインにLocal Environmentとしてリストされます。この環境を削除または変更することはできません。正しく動作しなくなった場合、チェーンコードをデプロイするだけで再構築できます。

ブロックチェーン・アプリケーション・ビルダーのチェーンコード・デプロイメントでは、Hyperledger Fabricの基本ネットワークおよびその他のサービスを起動し、チェーンコードをインストールしてインスタンス化します。

  1. チェーンコード詳細ペインで、「デプロイ」を選択します。
  2. デプロイメント・ウィザードで、次の手順を実行します:
    • 正しいチェーンコード名が選択されていることを確認します。
    • ターゲット環境を選択します。ローカル・デプロイメントの場合、ローカル環境を選択します。
    • デプロイ先のチャネルを選択します。mychannelという名前のチャネルが拡張機能のインストールとともにデフォルトで作成され、テストに使用できます。
    • 必要に応じて、初期パラメータを入力します。
  3. 「デプロイ」をクリックします。

チェーンコードのインスタンス化が終了すると、「出力」コンソールに、指定されたチャネルでチェーンコードが正常にインスタンス化され、インストールおよびデプロイされたことが示されます。

トラブルシューティング

チェーンコード・プロジェクトをローカル・ネットワークで実行すると、次の問題が発生する場合があります。

Go権限の欠落
Goチェーンコード・プロジェクトのローカル・ネットワークへのインストール時に、「出力」コンソールに次のようなエラーが表示されることがあります:
INFO (Runtime): 2020/06/22 22:57:09 build started

INFO (Runtime): Building ....

INFO (Runtime): go build runtime/cgo: copying /Users/myname/Library/Caches/go-build/f8/.….….d: open /usr/local/go/pkg/darwin_amd64/runtine/ 
cgo.a: permission denied

ERROR (Runtime): go build runtine/cgo: copying /Users/myname/Library/Caches/go-build/f8/.….….d: open /usr/local/go/pkg/darwin_amd64/runtime/
cgo.a: permission denied

INFO (Runtime): An error occurred while building: exit status 1
これは、Goに対する権限がないことが原因です。このエラーはMac OSでのみ表示されています。これは既知の問題です:
解決策: $GOROOTの権限を変更し、デプロイを再試行します:
sudo chmod -R 777 /usr/local/go
インスタンス化の失敗
インスタンス化が失敗したか、インスタンス化が破損したか、Dockerピア・コンテナがいっぱいになったか、Dockerピアがローカル・ネットワークで強制終了されたため、次のようなエラーが表示される場合があります:
============ Started instantiate Chaincode ============
[2028-19-01T19:25:lO.372] [ERROR] default - Error instantiating Chaincode GollGl on channel mychannel, detailed 
error: Error: error starting container: error starting container: Failed to generate platform-specific docker 
build: Failed to pull hyperledger/fabric-ccenv:latest : API error (404): manifest for hyperledger/ 
fabric-ccenv:latest not found: manifest unknown: manifest unknown [2020-19-01T19:25:10.372] (INFO) default -
============ Finished instantiate Chaincode ============
[2020-19-01119:25:10.372] [ERROR] default - Error: Error instantiating Chaincode Goll01 on channel mychannel, 
detailed error: Error: error starting container: error starting container: Failed to generate platfom-specific 
docker build: Failed to pull hyperledger/fabric-ccenv: latest : API error (404): manifest for hyperledger/ 
fabric-ccenv:lalest not found: manifest unknown: manifest unknown exited: signal: terminated 
INFO: exited: signal: terminated

ERROR: Error in Chaincode deployment
これは、ピア・コンテナが正しく再起動できないことが原因です。
解決策: 「環境」ペインでローカル環境を選択し、右クリックしてローカル環境の再構築を選択して、ランタイムを再構築します。デプロイを再試行します。
環境の再構築が必要な場合
次のようなエラーが表示されることがあります:
Starting ca.example.com ... 
Starting orderer.example.com ... 
Starting orderer.example.com ... error
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: 
error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Starting ca.example.com... error
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Encountered errors while bringing up the project.
ERROR: Starting ca.example.com ... 
Starting orderer.example.com ... 
Starting orderer.example.com ... error
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Starting ca.example.com ... error
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Encountered errors while bringing up the project.
ERROR: Error in Chaincode deployment
ローカル環境を再構築する必要があります。アプリケーション・ビルダーの「環境」ペインで、ローカル環境を右クリックし、ローカル環境の再構築を選択します。

リモートOracle Blockchain Platformネットワークへのチェーンコードのデプロイ

チェーンコード・プロジェクトをローカル・ネットワークでインスタンス化およびテストして、設計どおりに動作することを確認したら、Oracle Blockchain Platformにデプロイできます。

接続プロファイルに必要なファイルのダウンロード

接続プロファイルは、Oracle Blockchain Platform CloudまたはEnterprise Editionインスタンスからダウンロードできます:
  1. ローカル・ストレージにフォルダを作成して、接続プロファイル、管理キーおよび証明書を配置します。
  2. 接続プロファイルをダウンロードします。Oracle Blockchain Platformインスタンスのコンソールの開発者ツール・タブ、アプリケーション開発開発パッケージのダウンロードの順に移動します。
  3. インスタンスのコンソールから管理資格証明を取得します。「ネットワーク」組織からの管理資格証明のエクスポートの順にクリックします。
    • 管理資格証明からartifacts/crypto/ordererOrganizations/<instance-name>/signcert/<instance-name>-signcert.pemおよびartifacts/crypto/peerOrganizations/<instance-name>/signcert/<instance-name>-signcert.pemに管理者証明書をコピーします。
    • 管理資格証明からartifacts/crypto/ordererOrganizations/<instance-name>/keystore/<instance-name>-key.pemおよびartifacts/crypto/peerOrganizations/<instance-name>/keystore/<instance-name>-key.pemに管理キーをコピーします。

ノート:

プロジェクト・フォルダに接続プロファイルを配置する場合、これをGithubなどのコンテンツ・リポジトリと同期すると、誤って秘密キーを共有する可能性があることに注意してください。プライベートなすべてのものが.gitignoreファイルに追加されていることを確認します。

Oracle Blockchain Platformインスタンスへの接続の作成

このステップを実行するには、Blockchain Platformインスタンスが稼働している必要があります。

  1. VS Codeの「Environments」ペインで、「Create Environment」アイコンをクリックします。
  2. Environments Detailsウィザードで、次の手順を実行します:
    • リモート環境の名前を入力します。
    • 説明を入力します。
    • Oracle Blockchain Platformから接続プロファイルを格納したディレクトリを参照します。
    • チェーンコードをインストール、インスタンス化および呼び出す権限を持つユーザー名とパスワードを入力します。
  3. 「Test Login」をクリックします。これにより、プロファイルをリモート・ネットワークにログインしてデプロイできるようになります。
  4. 正常にログインしたら、「Create」をクリックしてプロファイルを保存します。

チェーンコードのデプロイ

  1. チェーンコード・ペインで、デプロイするチェーンコード・プロジェクトを選択します。
  2. チェーンコード詳細ペインで、「デプロイ」を選択します。
  3. デプロイメント・ウィザードでは、チェーンコード・プロジェクトの名前を事前に入力する必要があります。
    • ターゲット環境を選択します。リモート・デプロイメントの場合、事前に設定したOracle Blockchain Platform環境を選択します。
    • デプロイ先のチャネルの名前を入力します。
    • 必要に応じて、必要な初期パラメータを設定します。
  4. 「デプロイ」をクリックします。
チェーンコードがリモートのOracle Blockchain Platformに正常にデプロイされると、コンソール・ログに次の内容が表示されます:
  • チェーンコード・プロジェクトが正常にインストールされました。
  • 各ピアおよびチャネルでチェーンコードが正常にインスタンス化されました。

チェーンコード・プロジェクトの更新

チェーンコードのアップグレードは、ブロックチェーン・アプリケーション・ビルダーによって自動的に処理されます。チェーンコードを変更した後、再度デプロイします。これにより、更新が自動的に実行されます。

更新が成功すると、ログに次のように表示されます
  • チェーンコード・バージョンが正常にアップグレードされました。
  • チェーンコード・プロジェクトが正常にインストールされました。
  • 各ピアおよびチャネルでチェーンコードが正常にインスタンス化されました。

Oracle Blockchain Platformへの手動デプロイメント用のチェーンコード・プロジェクトのパッケージ化

チェーンコード・プロジェクトをパッケージ化して、Oracle Blockchain Platform CloudまたはEnterprise Editionに手動でデプロイできます。

パッケージ関数は、ビルド・ファイルと配布ファイルのみを含むzipファイルを作成します。チェーンコード・プロジェクトのbinarylibsnode_modulesおよびtestフォルダは含まれません。このzipは、デプロイメントのためにOracle Blockchain Platformに手動でアップロードできます。

  1. チェーンコード・ペインでチェーンコード・プロジェクトを選択します。
  2. 右クリックして「パッケージ」を選択します。
  3. パッケージを保存する場所を選択し、出力フォルダの選択をクリックします。

コマンドが正常に完了すると、パッケージの場所が出力に返されます。