1.1 コントラクトをアップグレードする前に、変更されたコードをリモート ウェアハウスにアップロードする必要があります
最初に、fabric-samples ディレクトリの下の chaincode ディレクトリに入ります。
cd /root/fabric-samples/chaincode
次に、自分のプロジェクトのソース コード ディレクトリに入り、git pull コマンドを実行すると、git アカウントのパスワードを入力するよう求められます。
1.2 test-network のあるディレクトリに戻る
test-network が配置されているディレクトリに戻り、チェーンコードを他のネットワーク コンポーネントと一緒にパッケージ化できるようにします。
cd ../../test-network
1.3 bin ディレクトリのバイナリ ファイルを CLI パスに追加する
ピア CLI を使用して目的の形式のチェーンコード パッケージを作成できます。次のコマンドを使用して、これらのバイナリを CLI パスに追加します。
export PATH=${PWD}/../bin:$PATH
1.4 FABRIC_CFG_PATH を設定して、fabric-samples の core.yaml ファイルを指すようにします。
export FABRIC_CFG_PATH=$PWD/../config/
1.5 チェーン コード パッケージの作成
peer lifecycle chaincode package hyperledger-fabric-contract-java-demo.tar.gz --path ../chaincode/hyperledger-fabric-contract-java-demo/ --lang java --label hyperledger-fabric-contract-java-demo_2
2 チェーンコード パッケージをインストールする
hyperledger-fabric-contract-java-demo スマート コントラクトをパッケージ化したら、チェーンコードをピア ノードにインストールできます。チェーンコードは、トランザクションを承認するすべてのピアにインストールする必要があります。Org1 と Org2 の両方からの承認を要求する承認ポリシーを設定するため、両方の組織のピア ノード (peer0.org1.example.com と peer0.org2.example.com) にチェーンコードをインストールする必要があります。
2.1 Org1 ピア ノード インストール チェーン コード
Org1 管理者としてピア CLI を操作するには、次の環境変数を設定します。
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:7051
peer lifecycle chaincode install コマンドを使用して、チェーンコードをピア ノードにインストールします。
peer lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz
インストール中に別のウィンドウを開いて、チェーンコード パッケージのインストール ログを表示できます。
// 查看所有容器
docker ps
// 查看最新容器的日志
docker logs -f 容器id
コントラクトを Maven 方式でインストールするには、毎回 Maven 環境を構築し、プログラムの実行に必要な依存関係をダウンロードする必要があるため、インストール コマンドを実行する前にしばらく待つ必要があります。
peer lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz
'InstallChaincode' のバッキング実装の呼び出しに失敗しました: インストールが成功したことを示す、既に正常にインストールされたチェーンコードが表示されます
2.2 Org2 ピア ノード インストール チェーン コード
次の環境変数を設定して、ピア CLI を Org2 管理者として操作します。
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:9051
peer lifecycle chaincode install コマンドを使用して、チェーンコードをピア ノードにインストールします。
peer lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz
注: チェーン コードをインストールすると、ピア ノードによってチェーン コードがビルドされます。スマート コントラクト コードに問題がある場合、インストール コマンドはチェーンコードからすべてのビルド エラーを返します。Java チェーンコードをインストールするプロセスは、maven ビルドと依存パッケージのダウンロードのプロセスを経る必要があるため、このプロセスは遅くなる可能性があり、インストール コマンドはタイムアウト エラーを返す可能性があります。しかし実際には、この時点ではまだビルド タスクがチェーンコードの docker コンテナーで実行されており、完了していません。ビルドが成功すると、チェーンコード パッケージが正常にインストールされます。
#3 チェーンコードで定義
チェーンコード パッケージをインストールしたら、組織のチェーンコード定義を渡す必要があります。この定義には、名前、バージョン、チェーンコード承認ポリシーなど、チェーンコード管理の重要なパラメーターが含まれています。
組織のピア ノードにチェーンコードがインストールされている場合、組織から渡されたチェーンコード定義にパッケージ ID を含める必要があります。パッケージ ID は、ピアにインストールされたチェーンコードを渡されたチェーンコード定義に関連付けるために使用され、組織がチェーンコードを使用してトランザクションを承認できるようにします。
3.1 パッケージ ID のクエリ
peer lifecycle chaincode queryinstalled
queryinstalled コマンドは、ピア ノードにインストールされているチェーンコードのリストを返します。
Installed chaincodes on peer:
Package ID: hyperledger-fabric-contract-java-demo_1:762e0fe3dbeee0f7b08fb6200adeb4a3a20f649a00f168c0b3c2257e53b6e506, Label: hyperledger-fabric-contract-java-demo_1
Package ID: hyperledger-fabric-contract-java-demo_1:762e0fe3dbeee0f7b08fb6200adeb4a3a20f649a00f168c0b3c2257e53b6e506, Label: hyperledger-fabric-contract-java-demo_2
チェーンコードを通過するときにバンドル ID を使用するため、バンドル ID を環境変数として保存します。返されたバンドル ID を以下のコマンドに貼り付けます。
注: バンドル ID はすべてのユーザーで異なるため、この手順は、前の手順でコマンド ウィンドウから返されたバンドル ID を使用して実行する必要があります。コマンドを直接コピーする代わりに!! !
package タグを使用して、新しいチェーンコードのパッケージ ID を見つけ、新しい環境変数として保存します。
export NEW_CC_PACKAGE_ID=hyperledger-fabric-contract-java-demo_4:993171856031ede4117405448c930c57ef99b4d54623d9b7247ee6f7152d8b71
3.2 チェーンコードで定義された Org2
Orig2 管理者として動作するように環境変数がピア CLI に設定されているため、Org2 組織レベルで hyperledger-fabric-contract-java-demo のチェーンコード定義を渡すことができます。チェーン コードを介して定義するには、peer lifecycle chaincode approvalformyorg コマンドを使用します。
ここでは、バージョンとシリアル番号の変更に注意する必要があります: バージョン 2.0 とシーケンス 2
peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 2.0 --package-id $NEW_CC_PACKAGE_ID --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
3.2 チェーン コードで定義された Org1
次の環境変数を Org1 管理者として実行するように設定します。
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_ADDRESS=localhost:7051
ピア ライフサイクル chaincode approvalformyorg コマンドを使用したチェーン コード定義を介して
peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 2.0 --package-id $NEW_CC_PACKAGE_ID --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
4 チェーンコード定義をチャネルにコミットします
ピア ライフサイクル チェーンコード checkcommitreadiness コマンドを使用して、チャネル メンバーが同じチェーンコード定義を承認したことを確認します。
peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 2.0 --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json
コマンドが次の JSON を返す場合、チェーンコードをアップグレードする準備ができています。
{
"approvals": {
"Org1MSP": true,
"Org2MSP": true
}
}
チェーンコードのアップグレード:
peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 2.0 --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
ピア ライフサイクル チェーンコード querycommitted コマンドを使用して、チェーンコード定義がチャネルにコミットされたことを確認できます。
peer lifecycle chaincode querycommitted --channelID mychannel --name hyperledger-fabric-contract-java-demo --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
バージョンが 2.0 で、シリアル番号が 2 であることがわかります。これは、送信が成功したことを示しています。
注意点:
チェーンコードを定義し、チェーンコードをアップグレードしてインストールするときは、バージョン番号とシリアル番号を変更することに注意してください