Java チェーン コードをデプロイする前に、Java および Maven 環境がマシンにインストールされていることを確認してください。
参照チュートリアル: https://www.bilibili.com/video/BV1bu41117Lx
1 パッケージスマートコントラクト
1.1 hyperledger-fabric-contract-java-demo コントラクト ソース コードをローカル マシンにダウンロードする
cd ~fabric-samples/chaincode/
git clone https://gitee.com/kernelHP/hyperledger-fabric-contract-java-demo.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_1
コマンドの説明: このコマンドは、現在のディレクトリに hyperledger-fabric-contract-java-demo.tar.gz という名前のパッケージを作成します。–lang タグはチェーンコード言語を指定するために使用され、–path タグはスマート コントラクト コードの場所を提供します。パスは標準パスまたは現在の作業ディレクトリからの相対パスである必要があります。–label タグは指定するために使用されます。インストール後にチェーンコードを識別します。タグにチェーンコード名とバージョンを含めることをお勧めします。
チェーンコード パッケージを作成したので、テスト ネットワークのピア ノードにチェーンコードをインストールできます。
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
次の情報を見ると、チェーンコードが正常にインストールされたことを示します
[外部チェーン イメージの転送に失敗しました。ソース サイトにはアンチ リーチ メカニズムがある可能性があります。イメージを保存して直接アップロードすることをお勧めします (img-pj5QCX1Y-1652845797158)(https ://doc.3hea.com/uploads/fabric/images/m_b49ae7c94703495123e7f9eedeec9036_r.png)]
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 コンテナーで実行されており、完了していません。ビルドが成功すると、チェーンコード パッケージが正常にインストールされます。
[外部リンクの画像転送に失敗しました。ソース サイトには盗難防止リンク メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-Xk66SKsU-1652845797159)(https://doc.3hea.com/uploads/ fabric/images/m_8c4f69f70f0226c334b86555c861d965_r.png )]
3 チェーンコードによる定義
チェーンコード パッケージをインストールしたら、組織のチェーンコード定義を渡す必要があります。この定義には、名前、バージョン、チェーンコード承認ポリシーなど、チェーンコード管理の重要なパラメーターが含まれています。
組織のピア ノードにチェーンコードがインストールされている場合、組織から渡されたチェーンコード定義にパッケージ ID を含める必要があります。パッケージ ID は、ピアにインストールされたチェーンコードを渡されたチェーンコード定義に関連付けるために使用され、組織がチェーンコードを使用してトランザクションを承認できるようにします。
3.1 Org1 と Org1 の両方のノードがインストールされたら、次のコマンドを使用してパッケージ ID を照会します。
peer lifecycle chaincode queryinstalled
バンドル ID は、チェーンコード ラベルとチェーンコード バイナリのハッシュの組み合わせです。各ピア ノードは同じパケット ID を生成します。次のような出力が表示されます。
Installed chaincodes on peer:
Package ID: hyperledger-fabric-contract-java-demo_1:762e0fe3dbeee0f7b08fb6200adeb4a3a20f649a00f168c0b3c2257e53b6e506, Label: hyperledger-fabric-contract-java-demo_1
チェーンコードを通過するときにバンドル ID を使用するため、バンドル ID を環境変数として保存します。返されたバンドル ID を以下のコマンドに貼り付けます。
注: バンドル ID はすべてのユーザーで異なるため、この手順は、前の手順でコマンド ウィンドウから返されたバンドル ID を使用して実行する必要があります。コマンドを直接コピーする代わりに!! !
上の図の赤いボックス内のコンテンツをコピーして、以下のコマンドに貼り付けます。
export CC_PACKAGE_ID=コピーしたばかりのコンテンツ
export CC_PACKAGE_ID=hyperledger-fabric-contract-java-demo_1:f61f9e5b97d2034aa864bccd148dac36d0583c13176dfd267af1c8f34e7c03ae
3.2 チェーンコードで定義された Org2
Orig2 管理者として動作するように環境変数がピア CLI に設定されているため、Org2 組織レベルで hyperledger-fabric-contract-java-demo のチェーンコード定義を渡すことができます。チェーンコード定義を渡すには、ピア ライフサイクル チェーンコードの approvalformyorg コマンドを使用します。
peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --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 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --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 1.0 --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json
このコマンドは、チャネル メンバーが checkcommitreadiness コマンドで指定されたパラメーターを承認したかどうかを示す JSON マップを生成します。
{
"approvals": {
"Org1MSP": true,
"Org2MSP": true
}
}
チャネルのメンバーである両方の組織が同じパラメーターに同意したため、チェーンコード定義をチャネルにコミットする準備が整いました。ピア ライフサイクル チェーンコード コミット コマンドを使用して、チェーンコード定義をチャネルにコミットできます。commit コマンドも、組織管理者がコミットする必要があります。
peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 1.0 --sequence 1 --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
チェーンコードがチャネルに正常にコミットされた場合、querycommitted コマンドはチェーンコード定義の順序とバージョンを返します。
Version: 1.0, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc, Approvals: [Org1MSP: true, Org2MSP: true]
5 コール チェーン コード
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n hyperledger-fabric-contract-java-demo --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 -c '{"function":"createCat","Args":["cat-0" , "tom" , "3" , "蓝色" , "大懒猫"]}'
peer chaincode query -C mychannel -n hyperledger-fabric-contract-java-demo -c '{"Args":["queryCat" , "cat-0"]}'
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n hyperledger-fabric-contract-java-demo --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 -c '{"function":"updateCat","Args":["cat-0" , "tom" , "3" , "白色" , "超级大懒猫"]}'
peer chaincode query -C mychannel -n hyperledger-fabric-contract-java-demo -c '{"Args":["queryCat" , "cat-0"]}'
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n hyperledger-fabric-contract-java-demo --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 -c '{"function":"deleteCat","Args":["cat-0"]}'
peer chaincode query -C mychannel -n hyperledger-fabric-contract-java-demo -c '{"Args":["queryCat" , "cat-0"]}'
Chaincode invoke successfully. result: status:200 メッセージを参照して、チェーンコードの呼び出しが成功したことを確認します。
[外部リンクの画像転送に失敗しました。ソース サイトには盗難防止リンク メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-kzvuevTP-1652845797159)(https://doc.3hea.com/uploads/ fabric/images/m_431af27faa97dfa181e7c2c359a0b5bc_r.png )]
6.よくある間違い
暗号を初期化できないため、ピアを実行できません。指定されたパス「/root/fabric-samples/chaincode/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp」が存在しないか、アクセスできません: stat /root/fabric-samples/chaincode/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp: そのようなファイルやディレクトリはありません
注:環境変数を構成してチェーンコードをインストールする前に、最初に fabric-samples/test-network ディレクトリに入る必要があります
。そうしないと、チェーンコードのインストール時に次のエラーが報告されます。
「hyperledger-fabric-contract-java-demo.tar.gz」でチェーンコード パッケージを読み取れませんでした: hyperledger-fabric-contract-java-demo.tar.gz を開きます: そのようなファイルまたはディレクトリはありません
また、契約圧縮パッケージをパッケージ化するときに /test-network ディレクトリに入らなかったためです。
チェーンコードのインストールがステータスで失敗しました: 500 - シミュレーションのエラー: トランザクションの実行に失敗しました f84be232e353667cf9821b97af99fe344af56c11641a2c541140e71f86d6c9d7: 送信エラー: トランザクションの実行中にタイムアウトになりました
ピア ライフサイクル チェーンコード install hyperledger-fabric-contract-java-demo.tar.gz コマンドが完了すると、このエラーが報告されてタイムアウトになる場合がありますが、maven プロジェクトをビルドして必要なファイルをダウンロードする必要があるため、心配する必要はありません。依存パッケージ、
新しいウィンドウを開いて docker ps と入力し、すべてのコンテナを表示します
docker ps
最新のコンテナ ログを表示する
docker logs -f 09a644e8470d
プロジェクトがビルドされました.
install chaincode コマンドを再度実行してください
peer lifecycle chaincode install hyperledger-fabric-contract-java-demo.tar.gz
チェーンコードが既に正常にインストールされていることが表示され
、チェーンコードが正常にインストールされたことを示します