Hyperledger Fabric—コントラクトをインストールする方法

1 パッケージスマートコントラクト

1.1 アップロード jar

/fabric-samples/chaincode/ ディレクトリに入り、コントラクト jar をアップロードします。

cd /root/fabric-samples/chaincode

1.2 テストネットワークがあるディレクトリに戻り、テストネットワークを開始します

/fabric-samples/test-network/ ディレクトリに入り、テスト ネットワークを開始します

cd /root/fabric-samples/test-network
# 启动测试网络
./network.sh up
# 创建一个通道, 默认通道名称是: mychannel
./network.sh createChannel

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 命令

peer lifecycle chaincode package Cases8xAccident.tar.gz --path ../chaincode/Cases8xAccident --lang java --label Cases8xAccident

コマンドの説明: このコマンドは、現在のディレクトリに Cases8xAccident.tar.gz という名前のパッケージを作成します。–lang タグはチェーンコード言語を指定するために使用され、–path タグはスマート コントラクト コードの場所を提供します。パスは標準パスまたは現在の作業ディレクトリからの相対パスである必要があります。–label タグは指定する
ために使用されます。
インストール後にチェーンコードを識別します。タグにチェーンコード名とバージョンを含めることをお勧めします。

チェーンコード パッケージを作成したので、テスト ネットワークのピア ノードにチェーンコードをインストールできます。

2 チェーンコード パッケージをインストールする

Cases8xAccident スマート コントラクトをパッケージ化したら、チェーンコードをピア ノードにインストールできます。チェーンコードは、トランザクションを承認するすべてのピアにインストールする必要があります。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 コマンドを使用して、ピア ノードにチェーンコードをインストールします。

peer lifecycle chaincode install Cases8xAccident.tar.gz

チェーン コードが正常にインストールされたことを示すには、次の情報を参照してください。
ここに画像の説明を挿入
HyperledgerFabric は、jar パッケージを使用してチェーン コードの原則をインストールします。

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 Cases8xAccident.tar.gz

ここに画像の説明を挿入

注: チェーン コードをインストールすると、ピア ノードによってチェーン コードがビルドされます。スマート コントラクト コードに問題がある場合、インストール コマンドはチェーンコードからすべてのビルド エラーを返します。Java チェーンコードのインストールには、Maven のビルドと依存パッケージのダウンロードのプロセスを実行する必要があるため、このプロセスは遅くなる可能性があるため、インストール コマンドはタイムアウト エラーを返す可能性があります。しかし実際には、この時点ではまだビルド タスクがチェーンコードの docker コンテナーで実行されており、完了していません。ビルドが成功すると、チェーンコード パッケージが正常にインストールされます。

3 チェーンコードによる定義

チェーンコード パッケージをインストールしたら、組織のチェーンコード定義を渡す必要があります。この定義には、名前、バージョン、チェーンコード承認ポリシーなど、チェーンコード管理の重要なパラメーターが含まれています。

組織のピア ノードにチェーンコードがインストールされている場合、組織から渡されたチェーンコード定義にパッケージ ID を含める必要があります。パッケージ ID は、ピアにインストールされたチェーンコードを渡されたチェーンコード定義に関連付けるために使用され、組織がチェーンコードを使用してトランザクションを承認できるようにします。

3.1 パッケージ ID のクエリ

peer lifecycle chaincode queryinstalled

バンドル ID は、チェーンコード ラベルとチェーンコード バイナリのハッシュの組み合わせです。各ピア ノードは同じパケット ID を生成します。次のような出力が表示されるはずです。
ここに画像の説明を挿入
チェーンコードを通過するときにバンドル ID を使用するため、バンドル ID を環境変数として保存します。返されたバンドル ID を以下のコマンドに貼り付けます。


注: バンドル ID はすべてのユーザーで異なるため、この手順は、前の手順でコマンド ウィンドウから返されたバンドル ID を使用して実行する必要があります。コマンドを直接コピーする代わりに!! !

export CC_PACKAGE_ID=Cases8xAccident:442624a81dbb67eb594ef50b0bed8a6662ddcc8b848382f5d9d69c1471f5b695

3.2 チェーンコードで定義された Org2

Orig2 管理者として動作するように環境変数がピア CLI に設定されているため、Org2 組織レベルで Cases8xAccident のチェーンコード定義を渡すことができます。チェーン コードを介して定義するには、ピア ライフサイクル
チェーンコード承認フォーム コマンドを使用します。

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name Cases8xAccident --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
下の図に注意してください。独自のチェーン コードに従ってコマンドを変更する必要がある場合があります。
  1. mychannel : チャンネル名
  2. Cases8xAccident : ピア ライフサイクル チェーンコード queryinstalled コマンドによって照会されたチェーンコード パッケージの名前
  3. version 1.0 : バージョン番号 (チェーンコードのアップグレード時にバージョン番号を変更する必要があります)
  4. シーケンス 1 : シリアル番号 (チェーン コードのアップグレード時にシリアル番号を変更する必要があります)

ここに画像の説明を挿入

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 Cases8xAccident --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 Cases8xAccident --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 Cases8xAccident  --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 Cases8xAccident  --cafile ${
    
    PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

ここに画像の説明を挿入


この時点で、チェーンコードのインストールが完了し、以下でチェーンコードのテストが実行されます

5 コール チェーン コード

最初に test-network ディレクトリに入ります

cd /root/fabric-samples/test-network

一般的なクエリ コマンド

ピア チェーンコード クエリ -Cチャネル名-nコントラクト ラベル名-c '{"Args":["自身のコントラクト内の関数名", "パラメータ 1 "]}'

peer chaincode query -C mychannel -n Cases8xAccident   -c '{"Args":["query" , "1"]}'

一般的な追加、更新、削除コマンド

Fabric2.3 ピア チェーンコード呼び出しの詳細な分析

ピア チェーンコードの呼び出し -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チャネル名-n契約ラベル名--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 '{"関数" :"自身のコントラクト内の関数名", "Args":["パラメータ 1", "パラメータ 2", "パラメータ 3"]}'

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 Cases8xAccident -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":"create","Args":["cat-0"]}'

コントラクトの実行ログ コマンドを表示する

docker ps -a

docker logs -f dev-peer0.org1 CONTAINER ノード コンテナーの ID

docker logs -f 28e6700307d0

おすすめ

転載: blog.csdn.net/qq_44154912/article/details/126221673