Hyperledger Fabric est une technologie blockchain intersectorielle initiée par la Linux Foundation. Elle est actuellement utilisée dans de nombreuses grandes entreprises. Je ne présenterai pas HF elle-même ici. Si vous êtes intéressé, vous pouvez faire attention à son site officiel.
1. Préparation :
Avant de commencer, certaines préparations sont nécessaires, notamment l'installation de divers middlewares :
Si les problèmes suivants surviennent lors de l'installation de Docker Compose, vous pouvez les gérer comme ceci
question:
la commande 'gcc' a échoué avec l'état de sortie 1
miam, installez python-devel
question:
Impossible de désinstaller les « requêtes ».
pip install docker-compose --ignore-installed requêtes
Si nécessaire, vous pouvez installer deux outils de gestion, Cello et Explorer, qui sont tous deux des produits open source sous Hyperledger.
2. Déploiement du réseau local (HF2.0+)
Ce mode est généralement utilisé par les utilisateurs pour apprendre le réseau Hyperledger Fabric et essayer d'exécuter le réseau de test et d'écrire du code localement. Il n'est pas utilisé dans l'environnement de production. L'environnement de production utilisera k8 pour déployer les réseaux associés et ne nécessite généralement que des contrats ou apiserver et autres contenus.
1. Il est préférable d'effectuer la copie du code source lorsque le réseau est ouvert.
2. Démarrez le réseau (nœud couchdb+CA)
./byfn.sh up -a -s couchdb
Démarrer couchDB seul
docker-compose -f docker-compose-cli.yaml -f docker-compose-couch.yaml -f docker-compose-etcdraft2.yaml up -d
3. S'il s'agit de modifier le code source d'Hyperledger Fabric, par exemple en changeant son algorithme de chiffrement en secret national, il doit être compilé et empaqueté. La commande est la suivante :
(1) Compilation Fabric - fichiers secondaires et images de démonstration principales
make dist-clean all
(2) Compilation de nœuds de structure
cd docker
docker build -t hyperledger/fabric-nodeenv:latest .
(3) Déploiement hors ligne, situation générale
docker save -o fabric-tools.tar hyperledger/fabric-tools:latest
docker load --input fabric-tools21.rar
Si la sauvegarde échoue, comme le nœud couchdb, utilisez plutôt l'exportation-importation.
docker export -o fabric-couchdb.tar couchdb1
docker import fabric-couchdb.tar hyperledger/fabric-couchdb:0.4.18
3. Installation de contrat intelligent (HF2.0+)
Après avoir écrit (ou mis à jour) le code du smart contract,
(1) Utilisez go build pour la compilation de code
(2) Installation de contrat intelligent (nécessite une exécution par chaque nœud)
peer lifecycle chaincode install record9.tar.gz
# 环境变量设置
export CC_PACKAGE_ID=record9:0305dad14704dbdd48c2650d35f45038452e0aa281541f463c37a0e293a266b4
(3) Interroger les contrats installés
peer lifecycle chaincode queryinstalled
(4) Organisation des nœuds de commutation
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) Reconnaissance de la définition du contrat (nécessite une mise en œuvre par chaque organisation)
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) Vérifiez les organismes qui ont reconnu le contrat
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) Soumettre la définition du contrat à Channel
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) Initialisation du contrat
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) Exécuter la requête de contrat (code fourni)
peer chaincode query -C $CHANNEL_NAME -n record9 -c '{"Args":["queryRecord","-2"]}'
(10) Exécuter l'appel de contrat (code fourni)
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. Installation et déploiement d'ApiServer (HF2.0+)
Le déploiement de l'apiserver est assez diversifié et diffère selon les langages utilisés, comme go, java et nodejs. Nous introduisons ici principalement les étapes générales sans montrer les scripts proprement dits.
1. Modifiez les paramètres de configuration pour générer le fichier image, ou remplissez les variables d'entrée (si une plateforme CI a été construite)
2. Générez l'image (par exemple./buildImages.sh apiserver 1.0)
3. Générer un outil de compilation (makeYaml)
4. Fichier de configuration d'anniversaire, nom d'identification du contrat/nom du réseau/nom d'identification de l'organisation/IP + port exposé/secret d'état-secret non-état (selon le réseau), utilisez l'outil de compilation dans la troisième étape
5. Copiez client_sdk.yaml/crypto-config dans le dossier de déploiement
6. Démarrez l'image (docker compose)
7. Paramètres du proxy inverse