Hyperledger Fabric は、Linux Foundation によって開始された業界横断的なブロックチェーン テクノロジーであり、現在多くの大企業で使用されています。HF 自体についてはここでは紹介しませんが、興味のある方は公式 Web サイトをご覧ください。
1. 準備:
開始する前に、さまざまなミドルウェアのインストールなど、特定の準備が必要です。
docker compose のインストール時に次の問題が発生した場合は、次のように対処できます。
質問:
コマンド「gcc」が終了ステータス 1 で失敗しました
yum で Python-devel をインストールします
質問:
「リクエスト」をアンインストールできません。
pip install docker-compose --ignore-installed リクエスト
必要に応じて、cello と Explorer という 2 つの管理ツールをインストールできます。これらは両方とも Hyperledger のオープン ソース製品です。
2. ローカルネットワーク展開 (HF2.0+)
このモードは通常、ユーザーが Hyperledger Fabric ネットワークを学習し、テスト ネットワークを実行してローカルでコードを記述するために使用されます。運用環境では使用されません。運用環境では、k8s を使用して関連ネットワークをデプロイし、通常はコントラクトまたはコントラクトのみが必要です。 apiserver およびその他のコンテンツ。
1. ソース コードのコピーは、ネットワークが開いているときに行うのが最適です。
2. ネットワーク(couchdb+CAノード)を起動します。
./byfn.sh up -a -s couchdb
couchDB を単独で起動する
docker-compose -f docker-compose-cli.yaml -f docker-compose-couch.yaml -f docker-compose-etcdraft2.yaml up -d
3. 暗号化アルゴリズムを国家機密に変更するなど、Hyperledger Fabric のソース コードを変更する場合は、コンパイルしてパッケージ化する必要があります。コマンドは次のとおりです。
(1) ファブリックのコンパイル - セカンダリ ファイルとメイン デモ イメージ
make dist-clean all
(2) ファブリックノードのコンパイル
cd docker
docker build -t hyperledger/fabric-nodeenv:latest .
(3) オフライン展開、一般的な状況
docker save -o fabric-tools.tar hyperledger/fabric-tools:latest
docker load --input fabric-tools21.rar
couchdb ノードなどで保存と読み込みが失敗した場合は、代わりにエクスポートとインポートを使用してください。
docker export -o fabric-couchdb.tar couchdb1
docker import fabric-couchdb.tar hyperledger/fabric-couchdb:0.4.18
3. スマートコントラクトのインストール(HF2.0+)
スマート コントラクト コードを作成 (または更新) した後、
(1) コードのコンパイルには go build を使用します
(2) スマートコントラクトのインストール(各ノードでの実行が必要)
peer lifecycle chaincode install record9.tar.gz
# 环境变量设置
export CC_PACKAGE_ID=record9:0305dad14704dbdd48c2650d35f45038452e0aa281541f463c37a0e293a266b4
(3) インストール済みの契約を問い合わせる
peer lifecycle chaincode queryinstalled
(4) スイッチノード構成
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer0.org2.example.com:9051
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
(5) 契約定義の認識(各組織による実施が必要)
peer lifecycle chaincode approveformyorg --channelID $CHANNEL_NAME --name {
{test7}} --version 1.0 --init-required --package-id $CC_PACKAGE_ID --sequence 1 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
(6) 契約を承認した組織を確認する
peer lifecycle chaincode checkcommitreadiness --channelID $CHANNEL_NAME --name record9 --version 1.0 --init-required --sequence 1 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json
(7) 契約定義をチャネルに提出
peer lifecycle chaincode commit -o orderer.example.com:7050 --channelID $CHANNEL_NAME --name record9 --version 1.0 --sequence 1 --init-required --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
(8) 契約の初期化
peer chaincode invoke -o orderer.example.com:7050 --isInit --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n record9 --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["Init","a","100"]}' --waitForEvent
(9) 契約クエリの実行 (コードが提供されます)
peer chaincode query -C $CHANNEL_NAME -n record9 -c '{"Args":["queryRecord","-2"]}'
(10) コントラクトコールの実行(コード提供)
peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n record9 --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["createRecord","-2","0","test file hash","10000", "2020-2-13 10:11:00"]}' --waitForEvent
3. ApiServer のインストールと展開 (HF2.0+)
apiserverのデプロイはgo、java、nodejsなど使用言語によって非常に多岐にわたりますが、ここでは実際のスクリプトは示さずに大まかな手順を中心に紹介します。
1. イメージ ファイルを生成するための構成パラメータを変更するか、入力変数を入力します (CI プラットフォームが構築されている場合)。
2. イメージを生成します (例:./buildImages.sh apiserver 1.0)
3. コンパイルツール(makeYaml)の生成
4. 誕生日設定ファイル、契約識別名/ネットワーク名/組織識別名/公開IP+ポート/状態シークレット-非状態シークレット(ネットワークに応じて)、3番目のステップでコンパイルツールを使用します。
5. client_sdk.yaml/crypto-config をデプロイフォルダーにコピーします
6. イメージを開始します (docker compose)
7. リバースプロキシ設定