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

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

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

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

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

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

  1. チェーンコード詳細ペインで、「デプロイ」を選択します。
  2. デプロイメント・ウィザードで:
    • 正しいチェーンコード名が選択されていることを確認します。
    • ターゲット環境を選択します。ローカル・デプロイメントの場合、ローカル環境を選択します。
    • デプロイ先のチャネルを選択します。mychannelという名前のチャネルが拡張機能のインストールとともにデフォルトで作成され、テストに使用できます。
    • 必要に応じて、初期パラメータを入力します。
    • トークン・プロジェクトの場合、初めてデプロイするときは、パラメータとしてトークン管理者のリストを入力する必要があります。リストは、トークン管理者を指定する{user_id, org_id}情報の配列です。ローカルHyperledger Fabricネットワークの場合は、org_idフィールドに値Org1MSPを使用します。NFTチェーンコードの場合、adminListパラメータのキーは、TypeScriptの場合はuserIdおよびorgId、Goの場合はUserIdおよびOrgIdです。初めてデプロイした後は、adminListパラメータに空の配列を指定するか、adminListパラメータを使用してトークン管理者を追加できます。初めてデプロイするデプロイヤではない他のデプロイヤは、adminListパラメータに空の配列を指定する必要があります。これを行うには、デプロイメント・ペインでInitパラメータ・リストを開き、adminListパラメータの横にあるマイナス記号(-)ボタンをクリックし、空の配列を選択します。
  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インスタンスへの接続構成の作成

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

  1. Visual Studio Codeの「環境」ペインで、「環境の作成」アイコンをクリックします。
  2. Environments Detailsウィザードで、次の手順を実行します:
    • リモート環境の名前を入力します。
    • 説明を入力します。
    • 「リモートURL」に、リモートOracle Blockchain PlatformインスタンスのURLを入力します。
    • ADMINまたはREST_CLIENTロールを持つOracle Blockchain PlatformユーザーのOracle Identity Cloud Serviceのユーザー名とパスワードを入力します。チェーンコードを起動するには、REST_CLIENTロールのみが必要です。チェーンコードをデプロイまたはアップグレードするには、IDCSユーザーにADMINロールも割り当てられている必要があります。ユーザーおよびロールの詳細は、ユーザーおよびアプリケーション・ロールの設定を参照してください。
  3. 「Create」をクリックして環境を保存します。ユーザー名とパスワードは、ローカルのVisual Studio Codeセッションに一時的に保存されます。Visual Studio Codeを閉じてから、新しいVisual Studio Codeセッションを開始する場合は、ユーザー名とパスワードを再度入力する必要があります。

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

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

複数の組織がある環境では、参加者インスタンスを介して同じチャネルにチェーンコードを再デプロイするには、コンソールを使用してチェーンコードをデプロイします。

チェーンコード・プロジェクトのアップグレード

チェーンコードのアップグレードは、ブロックチェーン・アプリケーション・ビルダーによって自動的に処理されます。チェーンコードを変更した後、再度デプロイすると、プロジェクトが自動的にアップグレードされます。アップグレード・プロセスの実行時に、adminListパラメータに空の配列を渡すか、adminListパラメータを使用してトークン管理者を追加できます。初回デプロイヤでない場合は、adminListパラメータに空の配列を指定する必要があります。adminListパラメータに空の配列を渡すには、デプロイメント・ペインでInitパラメータ・リストを開き、adminListパラメータの横にあるマイナス記号(-)ボタンをクリックし、空の配列を選択します。

アップグレードが成功すると、次のイベントが発生したことがログに表示されます。
  • Oracle Blockchain Platformの詳細が正常にフェッチされました。
  • ピアのリストは正常にフェッチされました。
  • チェーンコード・プロジェクトがすでにインストールされているかどうかを確認するためのチェックが行われ、インストールされている場合はバージョンがフェッチされました。
  • チェーンコード・バージョンが正常にアップグレードされました(たとえば、バージョン1.0から2.0へ)。

複数の組織がある環境では、チェーンコードをアップグレードするには、コンソールを使用し、参加者のチェーンコードを手動で承認します。

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

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

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

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

ソフトウェアの前提条件が変更されたため、TypeScriptチェーンコードに対してパッケージ・ファンクションを実行すると、パッケージを作成するOracle Blockchain Platformインスタンスのプロビジョニング日の入力を求められます。ブロックチェーン・アプリケーション・ビルダーで作成されたTypeScriptチェーンコードは、基礎となるインフラストラクチャに変更を加えることなく、以前のバージョンのOracle Blockchain Platformと互換性がありません。ブロックチェーン・アプリケーション・ビルダーは、選択内容に基づいてチェーンコード・インフラストラクチャを適切にパッケージ化します。

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