Ceci est une mise à jour. Il y avait beaucoup d'erreurs dans la dernière rédaction. Permettez-moi de le mettre à jour cette fois !
Voici les références :
Essayez l'écriture et le déploiement de code en chaîne testing_blog blog-CSDN de routiao
blog_CSDN de routiao - blockchain, blogueur dans le domaine du front-end
tester des échantillons de tissu/tester le réseau
1. Démarrez le réseau docker
Nous commençons d'abord l'exemple de test
cd fabric-samples/test-network
Ensuite, supprimez d'abord tous les conteneurs qui étaient précédemment en cours d'exécution
sudo ./network.sh down
puis réactivez le réseau
sudo ./network.sh up
Vous pouvez vérifier s'il est activé avec la commande :
sudo docker ps -a
On peut regarder de plus près les résultats obtenus après la commande ci-dessus :
2. Créez une chaîne
Le canal est une couche privée pour la communication entre les membres d'un réseau spécifique. Seuls les membres qui sont invités à rejoindre le canal peuvent l'utiliser, et il est invisible pour les autres membres du réseau. Chaque canal a un livre de compte blockchain séparé, qui est invité Les pairs rejoignant le canal peuvent stocker le registre du canal, puis vérifier les transactions du canal.
Exécutez la commande suivante pour créer un canal nommé mychannel pour connecter Org1 et Org2.
sudo ./network.sh createChannel
Lorsque cela apparaît, le canal a été créé
Remarque : Il peut y avoir de nombreux problèmes d'autorisation pendant le test. Si l'autorisation refusée apparaît, vous devez ouvrir le fichier d'autorisation, ce qui sera expliqué en détail dans le prochain article.
Ajouter une autorisation pour l'utilisateur afin de faciliter le fonctionnement de l'ensemble du dossier fabric
sudo chmod -R 777 ~/go
Dans le même temps, puisqu'il est également nécessaire d'ajouter des autorisations opt à l'utilisateur
sudo chmod -R 777 /opt
Pour interagir avec le réseau :
Une fois le réseau de test démarré avec succès, la commande peer sur la ligne de commande peut être utilisée pour interagir avec le réseau, ce qui permet aux utilisateurs d'appeler des contrats intelligents déployés, de mettre à jour des canaux ou d'installer et de déployer de nouveaux contrats intelligents.
Tout d'abord, vous devez le configurer. Il existe des fichiers binaires tels que peer dans le répertoire bin et plusieurs fichiers yaml dans le répertoire config. Si nécessaire, vous pouvez utiliser la commande suivante pour ajouter un peer, etc. à l'environnement variables :
Assurez-vous d'abord que vous êtes dans le test-network : Configurer les variables temporaires : (Si vous ne configurez pas ici, vous ne pouvez pas utiliser la commande peer)
export PATH=${PWD}/../bin:$PATH
De plus, vous devez configurer le répertoire où se trouve la configuration.
export FABRIC_CFG_PATH=$PWD/../config/
Nous devons également définir l'environnement de démarrage
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
De cette façon, le code blockchain peut être déployé. Notez que sudo ne peut pas être utilisé ici, sinon cela causera des problèmes dans l'environnement.
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
Si cela se produit, le déploiement du code blockchain est réussi.
Nous pouvons également voir dans le fichier que si le code blockchain est déployé, le système créera un package jar nommé basic.tar.gz sous le dossier test-network
3. Appel de contrat intelligent
Une fois le code de la chaîne déployé, nous pouvons appeler le contrat intelligent
Initialiser l'identité du membre en tant qu'organisation 1
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
Initialiser le grand livre
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 basic \
--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":"InitLedger","Args":[]}'
Après une exécution réussie, il apparaîtra :
Nous recherchons ensuite une liste d'actifs qui ont été ajoutés au registre des chaînes :
peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'
Voir l'effet :
On peut constater que nous avons effectivement interrogé les données, et soigneusement constaté que ces données sont réellement écrites dans le contrat intelligent. Nous pouvons trouver le contrat intelligent appelé /asset-transfer-basic/chaincode-go/chaincode/smartcontract.go
Découvrez la méthode InitLedger pour initialiser le grand livre est écrit comme ceci
Ensuite, nous obtiendrons ces données après avoir appelé
[
{"ID": "asset1", "color": "blue", "size": 5, "owner": "Tomoko", "appraisedValue": 300},
{"ID": "asset2", "color": "red", "size": 5, "owner": "Brad", "appraisedValue": 400},
{"ID": "asset3", "color": "green", "size": 10, "owner": "Jin Soo", "appraisedValue": 500},
{"ID": "asset4", "color": "yellow", "size": 10, "owner": "Max", "appraisedValue": 600},
{"ID": "asset5", "color": "black", "size": 15, "owner": "Adriana", "appraisedValue": 700},
{"ID": "asset6", "color": "white", "size": 15, "owner": "Michel", "appraisedValue": 800}
]
Ensuite, nous utilisons différentes méthodes dans le contrat intelligent.
4. Appelez différentes méthodes dans le contrat
Ces contrats intelligents sont écrits dans /asset-transfer-basic/chaincode-go/chaincode/smartcontract.go,
Ouvrons-le pour voir ce qu'il peut faire
4.1 Ajouter des actifs
Regardez le code dans le fichier go :
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 basic \
--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":"CreateAsset","Args":["asset7","pink","10","XZDD","16402"]}'
Mise en œuvre:
4.2 Supprimer des actifs
Contrat intelligent :
mettre en œuvre:
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 basic \
--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":"DeleteAsset","Args":["asset6"]}'
Mise en œuvre:
Afficher les informations :
On peut constater que l'enregistrement suivant a disparu
{"ID": "asset6", "color": "white", "size": 15, "owner": "Michel", "appraisedValue": 800}
4.3 Modifier les actifs
Contrat intelligent :
mettre en œuvre:
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 basic \
--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":"UpdateAsset","Args":["asset7","RED","9","XZDD","521521"]}'
Mise en œuvre:
Afficher les informations :
4.4 Transfert d'actifs
Contrat intelligent :
mettre en œuvre:
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 basic \
--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":"TransferAsset","Args":["asset5","XZDD"]}'
Mise en œuvre:
Afficher les informations :
Vous pouvez vérifier que les actifs ont été transférés à XZDD, et maintenant XZDD en est le propriétaire.
4.5 Afficher des actifs spécifiques
Contrat intelligent :
mettre en œuvre:
peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset7"]}'
Mise en œuvre:
5. Changer d'identité
Auparavant, l'organisation 1 était utilisée pour vérifier les ajouts, les suppressions, les modifications et les requêtes de code. Maintenant, nous pouvons ouvrir un autre terminal et utiliser l'organisation 2 pour vérifier les fonctions, il suffit de changer les variables d'environnement !
export PATH=${PWD}/../bin:$PATH
export CORE_PEER_TLS_ENABLED=true
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_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:9051
L'opération spécifique ne sera pas répétée ici. Vous pouvez essayer d'ouvrir deux fenêtres bash et de les initialiser avec des identités différentes. Une fenêtre est utilisée pour les opérations de changement d'actif, et l'autre fenêtre est utilisée pour les opérations de requête d'actif afin de tester l'effet de synchronisation du chaîne de blocs.