3 nœuds orderer ; organisation org1 avec deux nœuds pairs, peer0 et peer1 ; organisation org2 avec deux nœuds pairs, peer0 et peer1 ; | Nœud | IP hôte | Hôtes | Ports | |---|---|---|---| | cli | 192.168.1.66 | N/A | N/A | | orderer0 | 192.168.1.66 | orderer0.example.com | 7050, 8443, 9443 | | orderer1 | 192.168.1.66 | orderer1.example.com | 8050, 8444, 9444 | | orderer2 | 192.168.1.66 | orderer2.example.com | 9050, 8445, 9445 | | org1-peer0 | 192.168.1.66 | peer0.org1.example.com | 7051, 7052, 9446, 8125 | | org1-peer1 | 192.168.1.66 | peer1.org1.example.com | 8051, 7053, 9447, 8126 | | org2-peer0 | 192.168.1.66 | peer0.org2.example.com | 9051, 7054, 9448, 8127 | | org2-peer1 | 192.168.1.66 | peer1.org2.example.com | 10051, 7055, 9449, 8128 |
vim /etc/hosts
# Ajouter
192.168.1.66 orderer0.example.com
192.168.1.66 orderer1.example.com
192.168.1.66 orderer2.example.com
192.168.1.66 peer0.org1.example.com
192.168.1.66 peer1.org1.example.com
192.168.1.66 peer0.org2.example.com
192.168.1.66 peer1.org2.example.com
Déploiement du nœud org1-peer0
Éditer le fichier core.yaml : ```
Copyright IBM Corp. Tous droits réservés.
SPDX-License-Identifier: Apache-2.0
###############################################################################
Section Pair
############################################################################### peer:
# L'identifiant pair fournit un nom pour cette instance pair et est utilisé lors
# du nommage des ressources docker.
id: peer0.org1.example.com
# Le networkId permet une séparation logique des réseaux et est utilisé lors
# du nommage des ressources docker.
networkId: dev
# L'adresse de l'interface réseau locale sur laquelle ce pair écoutera.
# Par défaut, il écoutera sur toutes les interfaces réseau
listenAddress: 192.168.1.66:7051
# Le point de terminaison que ce pair utilise pour écouter les connexions chaincode entrantes.
# Si ceci est commenté, l'adresse d'écoute est sélectionnée pour être
# l'adresse du pair (voir ci-dessous) avec le port 7052
chaincodeListenAddress: 192.168.1.66:7052
# Le point de terminaison que le chaincode pour ce pair utilise pour se connecter au pair.
# Si ce n'est pas spécifié, l'adresse chaincodeListenAddress est sélectionnée.
# Et si chaincodeListenAddress n'est pas spécifié, l'adresse est sélectionnée à partir de
# l'adresse pair (voir ci-dessous). Si l'adresse pair spécifiée est invalide alors elle
# reviendra à l'IP détectée automatiquement (IP locale) quelle que soit la valeur de
# addressAutoDetect du pair.
chaincodeAddress: 192.168.1.66:7052
# Lorsqu'utilisé comme configuration pair, cela représente le point de terminaison vers d'autres pairs
# dans la même organisation. Pour les pairs dans d'autres organisations, voir
# gossip.externalEndpoint pour plus d'informations.
# Lorsqu'utilisé comme configuration CLI, cela signifie le point de terminaison pair pour interagir avec
address: 192.168.1.66:7051
# Si le pair doit déterminer programmatiquement son adresse
# Ce cas est utile pour les conteneurs docker.
# Lorsqu'il est défini sur true, cela remplacera l'adresse pair.
addressAutoDetect: false
# Paramètres pour le serveur passerelle du pair.
gateway:
# Si la passerelle est activée pour ce pair.
enabled: true
# endorsementTimeout est la durée pendant laquelle la passerelle attend une réponse
# des autres pairs approuvant avant de retourner une erreur de délai d'attente au client.
endorsementTimeout: 30s
# dialTimeout est la durée pendant laquelle la passerelle attend une connexion
# aux autres nœuds du réseau.
dialTimeout: 2m
# Paramètres de maintien de connexion pour le serveur pair et les clients
keepalive:
# L'intervalle est la durée après laquelle si le serveur ne voit
# aucune activité du client, il envoie un ping au client pour voir s'il est vivant
interval: 7200s
# Le délai d'expiration est la durée pendant laquelle le serveur attend une réponse
# du client après avoir envoyé un ping avant de fermer la connexion
timeout: 20s
# MinInterval est le temps minimum autorisé entre les pings clients.
# Si les clients envoient des pings plus fréquemment, le serveur pair
# les déconnectera
minInterval: 60s
# Paramètres de maintien de connexion client pour communiquer avec d'autres nœuds pairs
client:
# L'intervalle est le temps entre les pings vers les nœuds pairs. Cela doit
# être supérieur ou égal au minInterval spécifié par les
# nœuds pairs
interval: 60s
# Le délai d'expiration est la durée pendant laquelle le client attend une réponse de
# nœuds pairs avant de fermer la connexion
timeout: 20s
# Paramètres de maintien de connexion DeliveryClient pour la communication avec les nœuds
# d'ordonnancement.
deliveryClient:
# L'intervalle est le temps entre les pings vers les nœuds d'ordonnancement. Cela doit
# être supérieur ou égal au minInterval spécifié par les
# nœuds d'ordonnancement.
interval: 60s
# Le délai d'expiration est la durée pendant laquelle le client attend une réponse de
# nœuds d'ordonnancement avant de fermer la connexion
timeout: 20s
# Configuration liée à la diffusion
gossip:
# Ensemble d'amorçage pour initialiser la diffusion avec.
# C'est une liste d'autres pairs que ce pair contacte au démarrage.
# Important : Les points de terminaison ici doivent être des points de terminaison de pairs dans la même
# organisation, car le pair refuserait de se connecter à ces points de terminaison
# sauf s'ils sont dans la même organisation que le pair.
bootstrap: 192.168.1.66:7051
# NOTE : Les paramètres orgLeader et useLeaderElection sont mutuellement exclusifs.
# Les définir tous deux à true entraînerait l'arrêt du pair
# puisque c'est un état indéfini. Si les pairs sont configurés avec
# useLeaderElection=false, assurez-vous qu'il y a au moins 1 pair dans l'
# organisation dont orgLeader est défini sur true.
# Définit si le pair initialisera un algorithme dynamique pour
# la sélection du "leader", où le leader est le pair qui établit
# la connexion avec le service d'ordonnancement et utilise le protocole
# de livraison pour extraire les blocs de registre du service d'ordonnancement.
useLeaderElection: false
# Définit statiquement le pair comme "leader" d'une organisation,
# ce qui signifie que le pair actuel maintiendra la connexion
# avec le service d'ordonnancement et diffusera les blocs entre les pairs de
# sa propre organisation. Plusieurs pairs ou tous les pairs d'une organisation
# peuvent être configurés comme leaders d'organisation, afin qu'ils puissent tous
# extraire directement les blocs du service d'ordonnancement.
orgLeader: true
# Intervalle pour les interrogations du traqueur d'appartenance
membershipTrackerInterval: 5s
# Remplace le point de terminaison que le pair publie aux pairs
# dans son organisation. Pour les pairs dans des organisations étrangères
# voir 'externalEndpoint'
endpoint:
# Nombre maximum de blocs stockés en mémoire
maxBlockCountToStore: 10
# Temps maximum entre les poussées de messages consécutives (unité : milliseconde)
maxPropagationBurstLatency: 10ms
# Nombre maximum de messages stockés jusqu'à ce qu'un poussage soit déclenché vers les pairs distants
maxPropagationBurstSize: 10
# Nombre de fois qu'un message est poussé vers les pairs distants
propagateIterations: 1
# Nombre de pairs sélectionnés vers lesquels pousser les messages
propagatePeerNum: 3
# Détermine la fréquence des phases de tirage (unité : seconde)
# Doit être supérieur à digestWaitTime + responseWaitTime
pullInterval: 4s
# Nombre de pairs à partir desquels effectuer le tirage
pullPeerNum: 3
# Détermine la fréquence de tirage des messages d'information d'état provenant des pairs (unité : seconde)
requestStateInfoInterval: 4s
# Détermine la fréquence de poussage des messages d'information d'état vers les pairs (unité : seconde)
publishStateInfoInterval: 4s
# Temps maximum pendant lequel un message d'information d'état est conservé avant expiration
stateInfoRetentionInterval:
# Temps à partir duquel les certificats sont inclus dans les messages Alive (unité : seconde)
publishCertPeriod: 10s
# Devons-nous ignorer la vérification des messages de bloc ou non (actuellement non utilisé)
skipBlockVerification: false
# Délai de connexion (unité : seconde)
dialTimeout: 3s
# Délai de connexion (unité : seconde)
connTimeout: 2s
# Taille du tampon des messages reçus
recvBuffSize: 20
# Taille du tampon des messages envoyés
sendBuffSize: 200
# Temps d'attente avant que le moteur de tirage traite les résumés entrants (unité : seconde)
# Devrait être légèrement inférieur à requestWaitTime
digestWaitTime: 1s
# Temps d'attente avant que le moteur de tirage supprime le nonce entrant (unité : millisecondes)
# Devrait être légèrement supérieur à digestWaitTime
requestWaitTime: 1500ms
# Temps d'attente avant que le moteur de tirage termine le tirage (unité : seconde)
responseWaitTime: 2s
# Intervalle de vérification de vie (unité : seconde)
aliveTimeInterval: 5s
# Délai d'expiration de vie (unité : seconde)
aliveExpirationTimeout: 25s
# Intervalle de reconnexion (unité : seconde)
reconnectInterval: 25s
# Nombre maximum de tentatives de connexion à un pair
maxConnectionAttempts: 120
# Facteur d'expiration des messages pour les messages de vie
msgExpirationFactor: 20
# Ceci est un point de terminaison publié aux pairs en dehors de l'organisation.
# Si ce n'est pas défini, le pair ne sera pas connu des autres organisations.
externalEndpoint:
# Configuration du service d'élection de leader
election:
# Temps le plus long que le pair attend pour une appartenance stable pendant le démarrage de l'élection de leader (unité : seconde)
startupGracePeriod: 15s
# Intervalle des échantillons d'appartenance de diffusion pour vérifier sa stabilité (unité : seconde)
membershipSampleInterval: 1s
# Temps écoulé depuis le dernier message de déclaration avant que le pair décide d'effectuer l'élection de leader (unité : seconde)
leaderAliveThreshold: 10s
# Temps entre l'envoi du message de proposition par le pair et sa déclaration comme leader (envoi du message de déclaration) (unité : seconde)
leaderElectionDuration: 5s
pvtData:
# pullRetryThreshold détermine la durée maximale pendant laquelle les données privées correspondant à un bloc donné
# seront tentées d'être extraites des pairs jusqu'à ce que le bloc soit validé sans les données privées
pullRetryThreshold: 60s
# Lorsque les données privées entrent dans le magasin temporaire, elles sont associées à la hauteur du registre du pair à ce moment-là.
# transientstoreMaxBlockRetention définit la différence maximale entre la hauteur actuelle du registre lors de la validation,
# et les données privées résidant dans le magasin temporaire qui sont garanties de ne pas être purgées.
# Les données privées sont purgées du magasin temporaire lorsque des blocs avec des séquences qui sont des multiples
# de transientstoreMaxBlockRetention sont validés.
transientstoreMaxBlockRetention: 1000
# pushAckTimeout est le temps maximum d'attente pour une reconnaissance de chaque pair
# lors de la poussée des données privées au moment de l'appui.
pushAckTimeout: 3s
# Marge de tirage Block to live, utilisée comme tampon
# pour empêcher le pair d'essayer de tirer les données privées
# des pairs qui seront bientôt purgées dans les N prochains blocs.
# Cela aide un pair nouvellement joint à rattraper plus rapidement
# la hauteur actuelle de la blockchain.
btlPullMargin: 10
# le processus de réconciliation est effectué dans une boucle infinie, tandis que dans chaque itération le réconciliateur essaie de
# tirer des autres pairs les blocs manquants les plus récents avec une limitation de taille de lot maximale.
# reconcileBatchSize détermine la taille de lot maximale des données privées manquantes qui seront réconciliées dans une
# seule itération.
reconcileBatchSize: 10
# reconcileSleepInterval détermine le temps que le réconciliateur dort de la fin d'une itération jusqu'au début
# de la prochaine itération de réconciliation.
reconcileSleepInterval: 1m
# reconciliationEnabled est un indicateur qui indique si la réconciliation des données privées est activée ou non.
reconciliationEnabled: true
# skipPullingInvalidTransactionsDuringCommit est un indicateur qui indique si le tirage des données privées
# des transactions invalides provenant d'autres pairs doit être ignoré pendant le temps de validation et tiré
# uniquement via le réconciliateur.
skipPullingInvalidTransactionsDuringCommit: false
# implicitCollectionDisseminationPolicy spécifie la politique de dissémination pour la collection implicite propre au pair.
# Lorsqu'un pair approuve une proposition qui écrit dans sa propre collection implicite, les valeurs ci-dessous remplacent les valeurs par défaut
# pour la dissémination des données privées.
# Notez que cela s'applique à tous les canaux auxquels le pair a rejoint. L'implication est que requiredPeerCount doit
# être inférieur au nombre de pairs dans un canal qui a le plus petit nombre de pairs de l'organisation.
implicitCollectionDisseminationPolicy:
# requiredPeerCount définit le nombre minimum de pairs éligibles auxquels le pair doit réussir
# à disséminer les données privées pour sa propre collection implicite lors de l'appui. La valeur par défaut est 0.
requiredPeerCount: 0
# maxPeerCount définit le nombre maximum de pairs éligibles auxquels le pair tentera de
# disséminer les données privées pour sa propre collection implicite lors de l'appui. La valeur par défaut est 1.
maxPeerCount: 1
# Configuration liée au transfert d'état de la diffusion
state:
# indique si le transfert d'état est activé ou non
# la valeur par défaut est false, c'est-à-dire que le transfert d'état est actif
# et veille à synchroniser les blocs manquants permettant
# au pair en retard de rattraper la vitesse du reste du réseau.
# Gardez à l'esprit que lorsque peer.gossip.useLeaderElection est vrai
# et qu'il y a plusieurs pairs dans l'organisation,
# ou peer.gossip.useLeaderElection est faux ainsi que
# peer.gossip.orgleader étant faux, le registre du pair peut être en retard
# par rapport aux autres pairs et ne rattrapera jamais le rythme en raison du transfert d'état
# étant désactivé.
enabled: false
# checkInterval intervalle pour vérifier si le pair est suffisamment en retard pour
# demander des blocs via le transfert d'état d'un autre pair.
checkInterval: 10s
# responseTimeout durée d'attente pour la réponse de transfert d'état de
# autres pairs
responseTimeout: 3s
# batchSize le nombre de blocs à demander via le transfert d'état d'un autre pair
batchSize: 10
# blockBufferSize reflète la taille du tampon de réordonnancement
# qui capture les blocs et veille à les livrer dans l'ordre
# vers la couche de registre. La taille réelle du tampon est bornée entre
# 0 et 2*blockBufferSize, chaque canal maintient son propre tampon
blockBufferSize: 20
# maxRetries nombre maximum de nouvelles tentatives pour demander
# une seule requête de transfert d'état
maxRetries: 3
# Paramètres TLS
tls:
# Exiger le TLS côté serveur
enabled: true
# Exiger les certificats clients / TLS mutuel pour les connexions entrantes.
# Notez que les clients qui ne sont pas configurés pour utiliser un certificat
# échoueront à se connecter au pair.
clientAuthRequired: false
# Certificat X.509 utilisé pour le serveur TLS
cert:
file: /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org1.example.com/pairs/peer0.org1.example.com/tls/server.crt
# Clé privée utilisée pour le serveur TLS
key:
file: /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org1.example.com/pairs/peer0.org1.example.com/tls/server.key
# rootcert.file représente la chaîne de certificats racines de confiance utilisée pour vérifier les certificats
# des autres nœuds lors des connexions sortantes.
# Il n'est pas nécessaire de le définir, mais il peut être utilisé pour compléter l'ensemble des certificats TLS CA
# disponibles à partir des MSP de chaque configuration de canal.
rootcert:
file: /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org1.example.com/pairs/peer0.org1.example.com/tls/ca.crt
# Si le TLS mutuel est activé, clientRootCAs.files contient une liste de certificats racines supplémentaires
# utilisés pour vérifier les certificats des connexions clients.
# Il complète l'ensemble des certificats TLS CA disponibles à partir des MSP de chaque configuration de canal.
# Au minimum, définissez le certificat racine TLS CA de votre organisation afin que le pair puisse recevoir les demandes de jonction de canal.
clientRootCAs:
files:
- /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org1.example.com/pairs/peer0.org1.example.com/tls/ca.crt
# Clé privée utilisée pour TLS lors des connexions clientes.
# Si non définie, peer.tls.key.file sera utilisé à la place
clientKey:
file:
# Certificat X.509 utilisé pour TLS lors des connexions clientes.
# Si non défini, peer.tls.cert.file sera utilisé à la place
clientCert:
file:
# Authentication contient les paramètres de configuration liés à l'authentification
# des messages clients
authentication:
# la différence acceptable entre l'heure actuelle du serveur et l'
# heure du client comme spécifiée dans un message de demande client
timewindow: 15m
# Chemin sur le système de fichiers où le pair stockera les données (par exemple registre). Cet
# emplacement doit être protégé par un contrôle d'accès pour empêcher toute modification
# non intentionnelle qui pourrait corrompre les opérations du pair.
fileSystemPath: /var/hyperledger/production/org1-peer0
# BCCSP (fournisseur cryptographique Blockchain) : Sélectionnez quelle implémentation ou
# bibliothèque cryptographique utiliser
BCCSP:
Default: SW
# Paramètres pour le fournisseur cryptographique SW (c'est-à-dire lorsque DEFAULT : SW)
SW:
# TODO : Le hachage et le niveau de sécurité par défaut nécessitent une refactorisation pour être
# entièrement configurable. Changer ces valeurs par défaut nécessite une coordination
# SHA2 est codé en dur à plusieurs endroits, pas seulement dans BCCSP
Hash: SHA2
Security: 256
# Emplacement du magasin de clés
FileKeyStore:
# Si "", la valeur par défaut est 'mspConfigPath'/keystore
KeyStore:
# Paramètres pour le fournisseur cryptographique PKCS#11 (c'est-à-dire lorsque DEFAULT : PKCS11)
PKCS11:
# Emplacement de la bibliothèque de module PKCS11
Library:
# Étiquette du jeton
Label:
# Code PIN utilisateur
Pin:
Hash:
Security:
# Chemin sur le système de fichiers où le pair trouvera les configurations MSP locales
mspConfigPath: /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org1.example.com/pairs/peer0.org1.example.com/msp
# Identificateur du MSP local
# ----!!!!IMPORTANT!!!-!!!IMPORTANT!!!-!!!IMPORTANT!!!!----
# Les déploiements doivent changer la valeur de la chaîne localMspId.
# En particulier, le nom de l'ID MSP local d'un pair doit
# correspondre au nom de l'un des MSPs de chaque canal
# auquel ce pair appartient. Sinon, les messages de ce pair
# ne seront pas identifiés comme valides par les autres nœuds.
localMspId: Org1MSP
# Options de configuration client CLI communes
client:
# délai de connexion
connTimeout: 3s
# Configuration liée au service de livraison
deliveryclient:
# Active ce pair pour diffuser les blocs qu'il a extraits du service d'ordonnancement
# via la diffusion.
# Notez que 'gossip.state.enabled' contrôle la réplication de blocs point à point
# des blocs validés dans le passé.
blockGossipEnabled: true
# Définit le temps total que le service de livraison peut passer dans les tentatives de
# reconnexion jusqu'à ce que sa logique de nouvelle tentative abandonne et renvoie une erreur
reconnectTotalTimeThreshold: 3600s
# Définit le délai de connexion du service de livraison <-> service d'ordonnancement
connTimeout: 3s
# Définit le délai maximal du service de livraison entre les nouvelles tentatives consécutives
reConnectBackoffThreshold: 3600s
# Une liste d'adresses de points de terminaison de service d'ordonnancement qui devraient être remplacées
# lorsqu'elles sont trouvées dans les configurations de canal.
addressOverrides:
# - from:
# to:
# caCertsFile:
# - from:
# to:
# caCertsFile:
# Type pour le MSP local - par défaut c'est de type bccsp
localMspType: bccsp
# Utilisé avec les outils de profilage Go uniquement dans un environnement non de production. Dans
# la production, il devrait être désactivé (par exemple enabled : false)
profile:
enabled: false
listenAddress: 0.0.0.0:6060
# Handlers définit des gestionnaires personnalisés qui peuvent filtrer et modifier
# les objets passant dans le pair, tels que :
# Filtre d'authentification - rejeter ou transmettre les propositions des clients
# Décorateurs - ajouter ou modifier l'entrée chaincode transmise au chaincode
# Appuis - Signature personnalisée sur la charge utile de réponse de proposition et sa modification
# Une définition de gestionnaire valide contient :
# - Un nom qui est un nom de méthode de fabrique défini dans
# core/handlers/library/library.go pour les gestionnaires compilés statiquement
# - chemin de bibliothèque vers le binaire objet partagé pour les filtres branchables
# Les filtres d'authentification et les décorateurs sont chaînés et exécutés dans l'ordre
# où ils sont définis. Par exemple :
# authFilters:
# -
# name: FilterOne
# library: /opt/lib/filter.so
# -
# name: FilterTwo
# decorators:
# -
# name: DecoratorOne
# -
# name: DecoratorTwo
# library: /opt/lib/decorator.so
# Les appuis sont configurés en tant que carte dont les clés sont les chaincodes système d'appui qui sont remplacés.
# Ci-dessous un exemple qui remplace l'ESCC par défaut et utilise un plugin d'appui qui a la même fonctionnalité
# que l'ESCC par défaut.
# Si la propriété 'library' est absente, le nom est utilisé comme méthode de constructeur dans la bibliothèque intégrée similaire
# aux filtres d'authentification et aux décorateurs.
# endorsers:
# escc:
# name: DefaultESCC
# library: /etc/hyperledger/fabric/plugin/escc.so
handlers:
authFilters:
-
name: DefaultAuth
-
name: ExpirationCheck # Ce filtre vérifie l'expiration du certificat x509 d'identité
decorators:
-
name: DefaultDecorator
endorsers:
escc:
name: DefaultEndorsement
library:
validators:
vscc:
name: DefaultValidation
library:
# library: /etc/hyperledger/fabric/plugin/escc.so
# Nombre de goroutines qui exécuteront la validation des transactions en parallèle.
# Par défaut, le pair choisit le nombre de processeurs de la machine. Définissez cette
# variable pour remplacer ce choix.
# NOTE : remplacer cette valeur pourrait négativement influencer les performances du
# pair donc veuillez changer cette valeur uniquement si vous savez ce que vous faites
validatorPoolSize:
# Le service de découverte est utilisé par les clients pour interroger des informations sur les pairs,
# telles que - quels pairs ont rejoint un certain canal, quelle est la dernière
# configuration du canal, et surtout - étant donné un chaincode et un canal,
# quels ensembles possibles de pairs satisfont la politique d'appui.
discovery:
enabled: true
# Si le cache d'authentification est activé ou non.
authCacheEnabled: true
# La taille maximale du cache, après quoi un nettoyage a lieu
authCacheMaxSize: 1000
# La proportion (0 à 1) des entrées qui restent dans le cache après que le cache soit nettoyé en raison d'une surpopulation
authCachePurgeRetentionRatio: 0.75
# Si l'on autorise les non-administrateurs à effectuer des requêtes hors périmètre de canal.
# Lorsque c'est faux, cela signifie que seuls les administrateurs de pair peuvent effectuer des requêtes hors périmètre de canal.
orgMembersAllowedAccess: false
# Limits est utilisé pour configurer certaines limites de ressources internes.
limits:
# Concurrency limite le nombre de requêtes simultanément en cours d'exécution vers un service sur chaque pair.
# Actuellement cette option est appliquée uniquement au service d'appui et au service de livraison.
# Lorsque la propriété est absente ou que la valeur est 0, la limite de concurrence est désactivée pour le service.
concurrency:
# endorserService limite les requêtes simultanées vers le service d'appui qui gère le déploiement, la requête et l'invocation de chaincode,
# y compris les chaincodes utilisateur et les chaincodes système.
endorserService: 2500
# deliverService limite les auditeurs d'événements simultanés enregistrés auprès du service de livraison pour les événements de blocs et de transactions.
deliverService: 2500
# gatewayService limite les requêtes simultanées vers le service de passerelle qui gère la soumission et l'évaluation des transactions.
gatewayService: 500
# Puisque tous les nœuds devraient être cohérents, il est recommandé de conserver
# la valeur par défaut de 100 Mo pour MaxRecvMsgSize & MaxSendMsgSize
# Taille maximale du message en octets que le serveur et le client GRPC peuvent recevoir
maxRecvMsgSize: 104857600
# Taille maximale du message en octets que le serveur et le client GRPC peuvent envoyer
maxSendMsgSize: 104857600
###############################################################################
Section VM
############################################################################### vm:
# Point de terminaison du système de gestion vm. Pour docker peut être l'un des suivants en général
# unix:///var/run/docker.sock
# http://localhost:2375
# https://localhost:2376
# Si vous utilisez des constructeurs de chaincode externes et que vous n'avez pas besoin du constructeur de chaincode Docker par défaut,
# le point de terminaison devrait ne pas être configuré afin que le vérificateur de santé Docker du pair ne soit pas enregistré.
endpoint: unix:///var/run/docker.sock
# paramètres pour les vms docker
docker:
tls:
enabled: false
ca:
file: docker/ca.crt
cert:
file: docker/tls.crt
key:
file: docker/tls.key
# Active/désactive la sortie standard/erreur des conteneurs chaincode pour
# des fins de débogage
attachStdout: false
# Paramètres lors de la création du conteneur docker.
# Le conteneur peut être créé efficacement en utilisant ipam & dns-server pour le cluster
# NetworkMode - définit le mode réseau pour le conteneur. Les
# valeurs standard prises en charge sont : `host`(par défaut),`bridge`,`ipvlan`,`none`.
# Dns - une liste de serveurs DNS pour que le conteneur les utilise.
# Note : Les propriétés `Privileged` `Binds` `Links` et `PortBindings` de
# la configuration hôte Docker ne sont pas prises en charge et ne seront pas utilisées si définies.
# LogConfig - définit le pilote de journalisation (Type) et les options
# (Config) pour Docker. Pour plus d'informations,
# https://docs.docker.com/engine/admin/logging/overview/
# Note : Définir LogConfig en utilisant des variables d'environnement n'est pas pris en charge.
hostConfig:
NetworkMode: host
Dns:
# - 192.168.0.1
LogConfig:
Type: json-file
Config:
max-size: "50m"
max-file: "5"
Memory: 2147483648
###############################################################################
Section Chaincode
############################################################################### chaincode:
# L'id est utilisé par le stub de chaincode pour enregistrer le chaincode en cours d'exécution
# ID avec le pair et est généralement fourni via des variables ENV
# la forme `path` de l'ID est fournie lors de l'installation du chaincode.
# Le `name` est utilisé pour toutes les autres requêtes et peut être n'importe quelle chaîne.
id:
path:
name:
# Environnement de construction générique, adapté à la plupart des types de chaincode
builder: $(DOCKER_NS)/fabric-ccenv:$(TWO_DIGIT_VERSION)
# Active/désactive le téléchargement forcé des images docker de base (répertoriées ci-dessous)
# lors de l'instanciation du chaincode utilisateur.
# Utile lors de l'utilisation de balises d'image mobiles (telles que :latest)
pull: false
golang:
# golang n'aura jamais besoin de plus que baseos
runtime: $(DOCKER_NS)/fabric-baseos:$(TWO_DIGIT_VERSION)
# si oui ou non le chaincode golang doit être lié dynamiquement
dynamicLink: false
java:
# C'est une image basée sur java:openjdk-8 avec des outils de compilation
# supplémentaires ajoutés pour l'emballage de la couche shim java.
# Cette image est emballée avec les bibliothèques de couche shim nécessaires
# pour l'exécution du chaincode Java.
runtime: $(DOCKER_NS)/fabric-javaenv:$(TWO_DIGIT_VERSION)
node:
# C'est une image basée sur node:$(NODE_VER)-alpine
runtime: $(DOCKER_NS)/fabric-nodeenv:$(TWO_DIGIT_VERSION)
# Liste des répertoires à traiter comme des constructeurs et lanceurs externes pour
# chaincode. Le traitement de détection de constructeur externe itérera sur les
# constructeurs dans l'ordre spécifié ci-dessous.
# Si vous n'avez pas besoin de revenir au constructeur Docker par défaut, désactivez également vm.endpoint ci-dessus.
# Pour remplacer cette propriété via une variable d'environnement, utilisez CORE_CHAINCODE_EXTERNALBUILDERS: [{name: x, path: dir1}, {name: y, path: dir2}]
externalBuilders:
- name: ccaas_builder
path: /opt/hyperledger/ccaas_builder
propagateEnvironment:
- CHAINCODE_AS_A_SERVICE_BUILDER_CONFIG
# La durée maximale d'attente pour que le processus de construction et d'installation du chaincode
# soit terminé.
installTimeout: 300s
# Durée d'attente pour le démarrage d'un conteneur et l'attente de Register
# à traverser.
startuptimeout: 300s
# Durée d'attente pour les appels Invoke et Init pour éviter les problèmes.
# Ce délai d'attente est utilisé par tous les chaincodes dans tous les canaux, y compris
# les chaincodes système.
# Notez que pendant Invoke, si l'image n'est pas disponible (par exemple en train d'être
# nettoyée dans un environnement de développement), le pair construira automatiquement
# l'image, ce qui pourrait prendre plus de temps. Dans un environnement de production,
# l'image du chaincode est peu susceptible d'être supprimée, donc le délai d'attente pourrait être
# réduit en conséquence.
executetimeout: 30s
# Il y a 2 modes : "dev" et "net".
# En mode dev, l'utilisateur exécute le chaincode après avoir démarré le pair à partir de
# ligne de commande sur la machine locale.
# En mode net, le pair exécutera le chaincode dans un conteneur docker.
mode: net
# maintien de connexion en secondes. Dans les situations où la communication passe par un
# proxy qui ne prend pas en charge le maintien de connexion, ce paramètre maintiendra la connexion
# entre le pair et le chaincode.
# Une valeur <= 0 désactive le maintien de connexion
keepalive: 0
# chaincodes système activés
system:
_lifecycle: enable
cscc: enable
lscc: enable
qscc: enable
# Section de journalisation pour le conteneur chaincode
logging:
# Niveau par défaut pour tous les journaux dans le conteneur chaincode
level: info
# Remplacer le niveau par défaut pour le journal 'shim'
shim: warning
# Format pour les journaux du conteneur chaincode
format: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'
###############################################################################
Section Registre - la configuration du registre englobe à la fois la blockchain
et l'état
############################################################################### ledger:
blockchain:
state: # stateDatabase - les options sont "goleveldb", "CouchDB" # goleveldb - base de données d'état par défaut stockée dans goleveldb. # CouchDB - stocker la base de données d'état dans CouchDB stateDatabase: goleveldb # Limite sur le nombre d'enregistrements à retourner par requête totalQueryLimit: 100000 couchDBConfig: # Il est recommandé d'exécuter CouchDB sur le même serveur que le pair, et # de ne pas mapper le port conteneur CouchDB vers un port serveur dans docker-compose. # Sinon une sécurité appropriée doit être fournie sur la connexion entre # le client CouchDB (sur le pair) et le serveur. couchDBAddress: 127.0.0.1:5984 # Cet utilisateur doit avoir les autorités de lecture et d'écriture sur CouchDB username: # Le mot de passe est recommandé d'être transmis comme variable d'environnement # lors du démarrage (par exemple CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD). # S'il est stocké ici, le fichier doit être protégé par un contrôle d'accès # pour empêcher des utilisateurs non intentionnels de découvrir le mot de passe. password: # Nombre de nouvelles tentatives pour les erreurs CouchDB maxRetries: 3 # Nombre de nouvelles tentatives pour les erreurs CouchDB pendant le démarrage du pair. # Le délai entre les tentatives double à chaque tentative. # La valeur par défaut de 10 tentatives donne 11 tentatives sur 2 minutes. maxRetriesOnStartup: 10 # Délai de requête CouchDB (unité : durée, par exemple 20s) requestTimeout: 35s # Limite sur le nombre d'enregistrements par chaque requête CouchDB # Notez que les requêtes chaincode sont uniquement limitées par totalQueryLimit. # En interne le chaincode peut exécuter plusieurs requêtes CouchDB, # chacune de taille internalQueryLimit. internalQueryLimit: 1000 # Limite sur le nombre d'enregistrements par lot de mise à jour CouchDB maxBatchUpdateSize: 1000 # Créer la base de données système _global_changes # C'est facultatif. Créer la base de données de changements globaux nécessitera # des ressources système supplémentaires pour suivre les changements et maintenir la base de données createGlobalChangesDB: false # CacheSize indique le nombre maximum de mégaoctets (Mo) à allouer pour le cache d'état # en mémoire. Notez que CacheSize doit être un multiple de 32 Mo. S'il n'est pas un multiple # de 32 Mo, le pair arrondira la taille au multiple de 32 Mo suivant. # Pour désactiver le cache, 0 Mo doivent être affectés à cacheSize. cacheSize: 64
history: # enableHistoryDatabase - les options sont true ou false # Indique si l'historique des mises à jour de clés doit être stocké. # Tous les index d'historique seront stockés dans goleveldb, quelle que soit l'utilisation # de CouchDB ou d'une base de données alternative pour l'état. enableHistoryDatabase: true
pvtdataStore: # la taille maximale du lot de base de données pour convertir # les entrées de données manquantes non éligibles en entrées de données manquantes éligibles collElgProcMaxDbBatchSize: 5000 # la durée minimale (en millisecondes) entre l'écriture # de deux lots de base de données consécutifs pour convertir les entrées de données manquantes non éligibles en entrées de données manquantes éligibles collElgProcDbBatchesInterval: 1000 # Les entrées de données manquantes sont classées en deux catégories : # (1) priorisées # (2) dépriorisées # Initialement, toutes les données manquantes sont dans la liste priorisée. Quand le # réconciliateur est incapable de récupérer les données manquantes auprès d'autres pairs, # les données manquantes non réconciliées seraient déplacées vers la liste dépriorisée. # Le réconciliateur réessaiera les données manquantes dépriorisées après chaque # deprioritizedDataReconcilerInterval (unité : minutes). Notez que l' # intervalle doit être supérieur à reconcileSleepInterval deprioritizedDataReconcilerInterval: 60m
snapshots: # Chemin sur le système de fichiers où le pair stockera les instantanés du registre rootDir: /var/hyperledger/production/snapshots/org1-peer0
###############################################################################
Section Opérations
############################################################################### operations: # hôte et port pour le serveur d'opérations listenAddress: 127.0.0.1:9446
# Configuration TLS pour le point de terminaison des opérations
tls:
# TLS activé
enabled: false
# chemin vers le certificat de serveur PEM encodé pour le serveur d'opérations
cert:
file:
# chemin vers la clé de serveur PEM encodée pour le serveur d'opérations
key:
file:
# la plupart des points de terminaison de service d'opérations exigent l'authentification client lorsque TLS
# est activé. clientAuthRequired exige l'authentification par certificat client
# au niveau TLS pour accéder à toutes les ressources.
clientAuthRequired: false
# chemins vers les certificats CA PEM encodés à faire confiance pour l'authentification client
clientRootCAs:
files: []
###############################################################################
Section Métriques
############################################################################### metrics: # le fournisseur de métriques est l'un de statsd, prometheus, ou désactivé provider: disabled
# configuration statsd
statsd:
# type de réseau : tcp ou udp
network: udp
# adresse du serveur statsd
address: 127.0.0.1:8125
# l'intervalle auquel les compteurs et jauges mis en cache localement sont poussés
# vers statsd ; les temporisations sont poussées immédiatement
writeInterval: 10s
# le préfixe est ajouté à toutes les métriques statsd émises
prefix:
Démarrer le nœud org1-peer0 : ```
nohup ./peer node start > org1-peer0.log 2>&1 &
Déploiement du nœud org1-peer1
Éditer le fichier core.yaml : ```
Copyright IBM Corp. Tous droits réservés.
SPDX-License-Identifier: Apache-2.0
###############################################################################
Section Pair
############################################################################### peer:
# L'identifiant pair fournit un nom pour cette instance pair et est utilisé lors
# du nommage des ressources docker.
id: peer1.org1.example.com
# Le networkId permet une séparation logique des réseaux et est utilisé lors
# du nommage des ressources docker.
networkId: dev
# L'adresse de l'interface réseau locale sur laquelle ce pair écoutera.
# Par défaut, il écoutera sur toutes les interfaces réseau
listenAddress: 192.168.1.66:8051
# Le point de terminaison que ce pair utilise pour écouter les connexions chaincode entrantes.
# Si ceci est commenté, l'adresse d'écoute est sélectionnée pour être
# l'adresse du pair (voir ci-dessous) avec le port 7052
chaincodeListenAddress: 192.168.1.66:7053
# Le point de terminaison que le chaincode pour ce pair utilise pour se connecter au pair.
# Si ce n'est pas spécifié, l'adresse chaincodeListenAddress est sélectionnée.
# Et si chaincodeListenAddress n'est pas spécifié, l'adresse est sélectionnée à partir de
# l'adresse pair (voir ci-dessous). Si l'adresse pair spécifiée est invalide alors elle
# reviendra à l'IP détectée automatiquement (IP locale) quelle que soit la valeur de
# addressAutoDetect du pair.
# chaincodeAddress: 192.168.1.66:7053
# Lorsqu'utilisé comme configuration pair, cela représente le point de terminaison vers d'autres pairs
# dans la même organisation. Pour les pairs dans d'autres organisations, voir
# gossip.externalEndpoint pour plus d'informations.
# Lorsqu'utilisé comme configuration CLI, cela signifie le point de terminaison pair pour interagir avec
address: 192.168.1.66:8051
# Si le pair doit déterminer programmatiquement son adresse
# Ce cas est utile pour les conteneurs docker.
# Lorsqu'il est défini sur true, cela remplacera l'adresse pair.
addressAutoDetect: false
# Paramètres pour le serveur passerelle du pair.
gateway:
# Si la passerelle est activée pour ce pair.
enabled: true
# endorsementTimeout est la durée pendant laquelle la passerelle attend une réponse
# des autres pairs approuvant avant de retourner une erreur de délai d'attente au client.
endorsementTimeout: 30s
# dialTimeout est la durée pendant laquelle la passerelle attend une connexion
# aux autres nœuds du réseau.
dialTimeout: 2m
# Paramètres de maintien de connexion pour le serveur pair et les clients
keepalive:
# L'intervalle est la durée après laquelle si le serveur ne voit
# aucune activité du client, il envoie un ping au client pour voir s'il est vivant
interval: 7200s
# Le délai d'expiration est la durée pendant laquelle le serveur attend une réponse
# du client après avoir envoyé un ping avant de fermer la connexion
timeout: 20s
# MinInterval est le temps minimum autorisé entre les pings clients.
# Si les clients envoient des pings plus fréquemment, le serveur pair
# les déconnectera
minInterval: 60s
# Paramètres de maintien de connexion client pour communiquer avec d'autres nœuds pairs
client:
# L'intervalle est le temps entre les pings vers les nœuds pairs. Cela doit
# être supérieur ou égal au minInterval spécifié par les
# nœuds pairs
interval: 60s
# Le délai d'expiration est la durée pendant laquelle le client attend une réponse de
# nœuds pairs avant de fermer la connexion
timeout: 20s
# Paramètres de maintien de connexion DeliveryClient pour la communication avec les nœuds
# d'ordonnancement.
deliveryClient:
# L'intervalle est le temps entre les pings vers les nœuds d'ordonnancement. Cela doit
# être supérieur ou égal au minInterval spécifié par les
# nœuds d'ordonnancement.
interval: 60s
# Le délai d'expiration est la durée pendant laquelle le client attend une réponse de
# nœuds d'ordonnancement avant de fermer la connexion
timeout: 20s
# Configuration liée à la diffusion
gossip:
# Ensemble d'amorçage pour initialiser la diffusion avec.
# C'est une liste d'autres pairs que ce pair contacte au démarrage.
# Important : Les points de terminaison ici doivent être des points de terminaison de pairs dans la même
# organisation, car le pair refuserait de se connecter à ces points de terminaison
# sauf s'ils sont dans la même organisation que le pair.
bootstrap: 192.168.1.66:8051
# NOTE : orgLeader et useLeaderElection sont mutuellement exclusifs.
# Les définir tous deux à true entraînerait l'arrêt du pair
# puisque c'est un état indéfini. Si les pairs sont configurés avec
# useLeaderElection=false, assurez-vous qu'il y a au moins 1 pair dans l'
# organisation dont orgLeader est défini sur true.
# Définit si le pair initialisera un algorithme dynamique pour
# la sélection du "leader", où le leader est le pair qui établit
# la connexion avec le service d'ordonnancement et utilise le protocole
# de livraison pour extraire les blocs de registre du service d'ordonnancement.
useLeaderElection: false
# Définit statiquement le pair comme "leader" d'une organisation,
# ce qui signifie que le pair actuel maintiendra la connexion
# avec le service d'ordonnancement et diffusera les blocs entre les pairs de
# sa propre organisation. Plusieurs pairs ou tous les pairs d'une organisation
# peuvent être configurés comme leaders d'organisation, afin qu'ils puissent tous
# extraire directement les blocs du service d'ordonnancement.
orgLeader: true
# Intervalle pour les interrogations du traqueur d'appartenance
membershipTrackerInterval: 5s
# Remplace le point de terminaison que le pair publie aux pairs
# dans son organisation. Pour les pairs dans des organisations étrangères
# voir 'externalEndpoint'
endpoint:
# Nombre maximum de blocs stockés en mémoire
maxBlockCountToStore: 10
# Temps maximum entre les poussées de messages consécutives (unité : milliseconde)
maxPropagationBurstLatency: 10ms
# Nombre maximum de messages stockés jusqu'à ce qu'un poussage soit déclenché vers les pairs distants
maxPropagationBurstSize: 10
# Nombre de fois qu'un message est poussé vers les pairs distants
propagateIterations: 1
# Nombre de pairs sélectionnés vers lesquels pousser les messages
propagatePeerNum: 3
# Détermine la fréquence des phases de tirage (unité : seconde)
# Doit être supérieur à digestWaitTime + responseWaitTime
pullInterval: 4s
# Nombre de pairs à partir desquels effectuer le tirage
pullPeerNum: 3
# Détermine la fréquence de tirage des messages d'information d'état provenant des pairs (unité : seconde)
requestStateInfoInterval: 4s
# Détermine la fréquence de poussage des messages d'information d'état vers les pairs (unité : seconde)
publishStateInfoInterval: 4s
# Temps maximum pendant lequel un message d'information d'état est conservé avant expiration
stateInfoRetentionInterval:
# Temps à partir duquel les certificats sont inclus dans les messages Alive (unité : seconde)
publishCertPeriod: 10s
# Devons-nous ignorer la vérification des messages de bloc ou non (actuellement non utilisé)
skipBlockVerification: false
# Délai de connexion (unité : seconde)
dialTimeout: 3s
# Délai de connexion (unité : seconde)
connTimeout: 2s
# Taille du tampon des messages reçus
recvBuffSize: 20
# Taille du tampon des messages envoyés
sendBuffSize: 200
# Temps d'attente avant que le moteur de tirage traite les résumés entrants (unité : seconde)
# Devrait être légèrement inférieur à requestWaitTime
digestWaitTime: 1s
# Temps d'attente avant que le moteur de tirage supprime le nonce entrant (unité : millisecondes)
# Devrait être légèrement supérieur à digestWaitTime
requestWaitTime: 1500ms
# Temps d'attente avant que le moteur de tirage termine le tirage (unité : seconde)
responseWaitTime: 2s
# Intervalle de vérification de vie (unité : seconde)
aliveTimeInterval: 5s
# Délai d'expiration de vie (unité : seconde)
aliveExpirationTimeout: 25s
# Intervalle de reconnexion (unité : seconde)
reconnectInterval: 25s
# Nombre maximum de tentatives de connexion à un pair
maxConnectionAttempts: 120
# Facteur d'expiration des messages pour les messages de vie
msgExpirationFactor: 20
# Ceci est un point de terminaison publié aux pairs en dehors de l'organisation.
# Si ce n'est pas défini, le pair ne sera pas connu des autres organisations.
externalEndpoint:
# Configuration du service d'élection de leader
election:
# Temps le plus long que le pair attend pour une appartenance stable pendant le démarrage de l'élection de leader (unité : seconde)
startupGracePeriod: 15s
# Intervalle des échantillons d'appartenance de diffusion pour vérifier sa stabilité (unité : seconde)
membershipSampleInterval: 1s
# Temps écoulé depuis le dernier message de déclaration avant que le pair décide d'effectuer l'élection de leader (unité : seconde)
leaderAliveThreshold: 10s
# Temps entre l'envoi du message de proposition par le pair et sa déclaration comme leader (envoi du message de déclaration) (unité : seconde)
leaderElectionDuration: 5s
pvtData:
# pullRetryThreshold détermine la durée maximale pendant laquelle les données privées correspondant à un bloc donné
# seront tentées d'être extraites des pairs jusqu'à ce que le bloc soit validé sans les données privées
pullRetryThreshold: 60s
# Lorsque les données privées entrent dans le magasin temporaire, elles sont associées à la hauteur du registre du pair à ce moment-là.
# transientstoreMaxBlockRetention définit la différence maximale entre la hauteur actuelle du registre lors de la validation,
# et les données privées résidant dans le magasin temporaire qui sont garanties de ne pas être purgées.
# Les données privées sont purgées du magasin temporaire lorsque des blocs avec des séquences qui sont des multiples
# de transientstoreMaxBlockRetention sont validés.
transientstoreMaxBlockRetention: 1000
# pushAckTimeout est le temps maximum d'attente pour une reconnaissance de chaque pair
# lors de la poussée des données privées au moment de l'appui.
pushAckTimeout: 3s
# Marge de tirage Block to live, utilisée comme tampon
# pour empêcher le pair d'essayer de tirer les données privées
# des pairs qui seront bientôt purgées dans les N prochains blocs.
# Cela aide un pair nouvellement joint à rattraper plus rapidement
# la hauteur actuelle de la blockchain.
btlPullMargin: 10
# le processus de réconciliation est effectué dans une boucle infinie, tandis que dans chaque itération le réconciliateur essaie de
# tirer des autres pairs les blocs manquants les plus récents avec une limitation de taille de lot maximale.
# reconcileBatchSize détermine la taille de lot maximale des données privées manquantes qui seront réconciliées dans une
# seule itération.
reconcileBatchSize: 10
# reconcileSleepInterval détermine le temps que le réconciliateur dort de la fin d'une itération jusqu'au début
# de la prochaine itération de réconciliation.
reconcileSleepInterval: 1m
# reconciliationEnabled est un indicateur qui indique si la réconciliation des données privées est activée ou non.
reconciliationEnabled: true
# skipPullingInvalidTransactionsDuringCommit est un indicateur qui indique si le tirage des données privées
# des transactions invalides provenant d'autres pairs doit être ignoré pendant le temps de validation et tiré
# uniquement via le réconciliateur.
skipPullingInvalidTransactionsDuringCommit: false
# implicitCollectionDisseminationPolicy spécifie la politique de dissémination pour la collection implicite propre au pair.
# Lorsqu'un pair approuve une proposition qui écrit dans sa propre collection implicite, les valeurs ci-dessous remplacent les valeurs par défaut
# pour la dissémination des données privées.
# Notez que cela s'applique à tous les canaux auxquels le pair a rejoint. L'implication est que requiredPeerCount doit
# être inférieur au nombre de pairs dans un canal qui a le plus petit nombre de pairs de l'organisation.
implicitCollectionDisseminationPolicy:
# requiredPeerCount définit le nombre minimum de pairs éligibles auxquels le pair doit réussir
# à disséminer les données privées pour sa propre collection implicite lors de l'appui. La valeur par défaut est 0.
requiredPeerCount: 0
# maxPeerCount définit le nombre maximum de pairs éligibles auxquels le pair tentera de
# disséminer les données privées pour sa propre collection implicite lors de l'appui. La valeur par défaut est 1.
maxPeerCount: 1
# Configuration liée au transfert d'état de la diffusion
state:
# indique si le transfert d'état est activé ou non
# la valeur par défaut est false, c'est-à-dire que le transfert d'état est actif
# et veille à synchroniser les blocs manquants permettant
# au pair en retard de rattraper la vitesse du reste du réseau.
# Gardez à l'esprit que lorsque peer.gossip.useLeaderElection est vrai
# et qu'il y a plusieurs pairs dans l'organisation,
# ou peer.gossip.useLeaderElection est faux ainsi que
# peer.gossip.orgleader étant faux, le registre du pair peut être en retard
# par rapport aux autres pairs et ne rattrapera jamais le rythme en raison du transfert d'état
# étant désactivé.
enabled: false
# checkInterval intervalle pour vérifier si le pair est suffisamment en retard pour
# demander des blocs via le transfert d'état d'un autre pair.
checkInterval: 10s
# responseTimeout durée d'attente pour la réponse de transfert d'état de
# autres pairs
responseTimeout: 3s
# batchSize le nombre de blocs à demander via le transfert d'état d'un autre pair
batchSize: 10
# blockBufferSize reflète la taille du tampon de réordonnancement
# qui capture les blocs et veille à les livrer dans l'ordre
# vers la couche de registre. La taille réelle du tampon est bornée entre
# 0 et 2*blockBufferSize, chaque canal maintient son propre tampon
blockBufferSize: 20
# maxRetries nombre maximum de nouvelles tentatives pour demander
# une seule requête de transfert d'état
maxRetries: 3
# Paramètres TLS
tls:
# Exiger le TLS côté serveur
enabled: true
# Exiger les certificats clients / TLS mutuel pour les connexions entrantes.
# Notez que les clients qui ne sont pas configurés pour utiliser un certificat
# échoueront à se connecter au pair.
clientAuthRequired: false
# Certificat X.509 utilisé pour le serveur TLS
cert:
file: /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org1.example.com/pairs/peer1.org1.example.com/tls/server.crt
# Clé privée utilisée pour le serveur TLS
key:
file: /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org1.example.com/pairs/peer1.org1.example.com/tls/server.key
# rootcert.file représente la chaîne de certificats racines de confiance utilisée pour vérifier les certificats
# des autres nœuds lors des connexions sortantes.
# Il n'est pas nécessaire de le définir, mais il peut être utilisé pour compléter l'ensemble des certificats TLS CA
# disponibles à partir des MSP de chaque configuration de canal.
rootcert:
file: /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org1.example.com/pairs/peer1.org1.example.com/tls/ca.crt
# Si le TLS mutuel est activé, clientRootCAs.files contient une liste de certificats racines supplémentaires
# utilisés pour vérifier les certificats des connexions clients.
# Il complète l'ensemble des certificats TLS CA disponibles à partir des MSP de chaque configuration de canal.
# Au minimum, définissez le certificat racine TLS CA de votre organisation afin que le pair puisse recevoir les demandes de jonction de canal.
clientRootCAs:
files:
- /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org1.example.com/pairs/peer1.org1.example.com/tls/ca.crt
# Clé privée utilisée pour TLS lors des connexions clientes.
# Si non définie, peer.tls.key.file sera utilisé à la place
clientKey:
file:
# Certificat X.509 utilisé pour TLS lors des connexions clientes.
# Si non défini, peer.tls.cert.file sera utilisé à la place
clientCert:
file:
# Authentication contient les paramètres de configuration liés à l'authentification
# des messages clients
authentication:
# la différence acceptable entre l'heure actuelle du serveur et l'
# heure du client comme spécifiée dans un message de demande client
timewindow: 15m
# Chemin sur le système de fichiers où le pair stockera les données (par exemple registre). Cet
# emplacement doit être protégé par un contrôle d'accès pour empêcher toute modification
# non intentionnelle qui pourrait corrompre les opérations du pair.
fileSystemPath: /var/hyperledger/production/org1-peer1
# BCCSP (fournisseur cryptographique Blockchain) : Sélectionnez quelle implémentation ou
# bibliothèque cryptographique utiliser
BCCSP:
Default: SW
# Paramètres pour le fournisseur cryptographique SW (c'est-à-dire lorsque DEFAULT : SW)
SW:
# TODO : Le hachage et le niveau de sécurité par défaut nécessitent une refactorisation pour être
# entièrement configurable. Changer ces valeurs par défaut nécessite une coordination
# SHA2 est codé en dur à plusieurs endroits, pas seulement dans BCCSP
Hash: SHA2
Security: 256
# Emplacement du magasin de clés
FileKeyStore:
# Si "", la valeur par défaut est 'mspConfigPath'/keystore
KeyStore:
# Paramètres pour le fournisseur cryptographique PKCS#11 (c'est-à-dire lorsque DEFAULT : PKCS11)
PKCS11:
# Emplacement de la bibliothèque de module PKCS11
Library:
# Étiquette du jeton
Label:
# Code PIN utilisateur
Pin:
Hash:
Security:
# Chemin sur le système de fichiers où le pair trouvera les configurations MSP locales
mspConfigPath: /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org1.example.com/pairs/peer1.org1.example.com/msp
# Identificateur du MSP local
# ----!!!!IMPORTANT!!!-!!!IMPORTANT!!!-!!!IMPORTANT!!!!----
# Les déploiements doivent changer la valeur de la chaîne localMspId.
# En particulier, le nom de l'ID MSP local d'un pair doit
# correspondre au nom de l'un des MSPs de chaque canal
# auquel ce pair appartient. Sinon, les messages de ce pair
# ne seront pas identifiés comme valides par les autres nœuds.
localMspId: Org1MSP
# Options de configuration client CLI communes
client:
# délai de connexion
connTimeout: 3s
# Configuration liée au service de livraison
deliveryclient:
# Active ce pair pour diffuser les blocs qu'il a extraits du service d'ordonnancement
# via la diffusion.
# Notez que 'gossip.state.enabled' contrôle la réplication de blocs point à point
# des blocs validés dans le passé.
blockGossipEnabled: true
# Définit le temps total que le service de livraison peut passer dans les tentatives de
# reconnexion jusqu'à ce que sa logique de nouvelle tentative abandonne et renvoie une erreur
reconnectTotalTimeThreshold: 3600s
# Définit le délai de connexion du service de livraison <-> service d'ordonnancement
connTimeout: 3s
# Définit le délai maximal du service de livraison entre les nouvelles tentatives consécutives
reConnectBackoffThreshold: 3600s
# Une liste d'adresses de points de terminaison de service d'ordonnancement qui devraient être remplacées
# lorsqu'elles sont trouvées dans les configurations de canal.
addressOverrides:
# - from:
# to:
# caCertsFile:
# - from:
# to:
# caCertsFile:
# Type pour le MSP local - par défaut c'est de type bccsp
localMspType: bccsp
# Utilisé avec les outils de profilage Go uniquement dans un environnement non de production. Dans
# la production, il devrait être désactivé (par exemple enabled : false)
profile:
enabled: false
listenAddress: 0.0.0.0:6060
# Handlers définit des gestionnaires personnalisés qui peuvent filtrer et modifier
# les objets passant dans le pair, tels que :
# Filtre d'authentification - rejeter ou transmettre les propositions des clients
# Décorateurs - ajouter ou modifier l'entrée chaincode transmise au chaincode
# Appuis - Signature personnalisée sur la charge utile de réponse de proposition et sa modification
# Une définition de gestionnaire valide contient :
# - Un nom qui est un nom de méthode de fabrique défini dans
# core/handlers/library/library.go pour les gestionnaires compilés statiquement
# - chemin de bibliothèque vers le binaire objet partagé pour les filtres branchables
# Les filtres d'authentification et les décorateurs sont chaînés et exécutés dans l'ordre
# où ils sont définis. Par exemple :
# authFilters:
# -
# name: FilterOne
# library: /opt/lib/filter.so
# -
# name: FilterTwo
# decorators:
# -
# name: DecoratorOne
# -
# name: DecoratorTwo
# library: /opt/lib/decorator.so
# Les appuis sont configurés en tant que carte dont les clés sont les chaincodes système d'appui qui sont remplacés.
# Ci-dessous un exemple qui remplace l'ESCC par défaut et utilise un plugin d'appui qui a la même fonctionnalité
# que l'ESCC par défaut.
# Si la propriété 'library' est absente, le nom est utilisé comme méthode de constructeur dans la bibliothèque intégrée similaire
# aux filtres d'authentification et aux décorateurs.
# endorsers:
# escc:
# name: DefaultESCC
# library: /etc/hyperledger/fabric/plugin/escc.so
handlers:
authFilters:
-
name: DefaultAuth
-
name: ExpirationCheck # Ce filtre vérifie l'expiration du certificat x509 d'identité
decorators:
-
name: DefaultDecorator
endorsers:
escc:
name: DefaultEndorsement
library:
validators:
vscc:
name: DefaultValidation
library:
# library: /etc/hyperledger/fabric/plugin/escc.so
# Nombre de goroutines qui exécuteront la validation des transactions en parallèle.
# Par défaut, le pair choisit le nombre de processeurs de la machine. Définissez cette
# variable pour remplacer ce choix.
# NOTE : remplacer cette valeur pourrait négativement influencer les performances du
# pair donc veuillez changer cette valeur uniquement si vous savez ce que vous faites
validatorPoolSize:
# Le service de découverte est utilisé par les clients pour interroger des informations sur les pairs,
# telles que - quels pairs ont rejoint un certain canal, quelle est la dernière
# configuration du canal, et surtout - étant donné un chaincode et un canal,
# quels ensembles possibles de pairs satisfont la politique d'appui.
discovery:
enabled: true
# Si le cache d'authentification est activé ou non.
authCacheEnabled: true
# La taille maximale du cache, après quoi un nettoyage a lieu
authCacheMaxSize: 1000
# La proportion (0 à 1) des entrées qui restent dans le cache après que le cache soit nettoyé en raison d'une surpopulation
authCachePurgeRetentionRatio: 0.75
# Si l'on autorise les non-administrateurs à effectuer des requêtes hors périmètre de canal.
# Lorsque c'est faux, cela signifie que seuls les administrateurs de pair peuvent effectuer des requêtes hors périmètre de canal.
orgMembersAllowedAccess: false
# Limits est utilisé pour configurer certaines limites de ressources internes.
limits:
# Concurrency limite le nombre de requêtes simultanément en cours d'exécution vers un service sur chaque pair.
# Actuellement cette option est appliquée uniquement au service d'appui et au service de livraison.
# Lorsque la propriété est absente ou que la valeur est 0, la limite de concurrence est désactivée pour le service.
concurrency:
# endorserService limite les requêtes simultanées vers le service d'appui qui gère le déploiement, la requête et l'invocation de chaincode,
# y compris les chaincodes utilisateur et les chaincodes système.
endorserService: 2500
# deliverService limite les auditeurs d'événements simultanés enregistrés auprès du service de livraison pour les événements de blocs et de transactions.
deliverService: 2500
# gatewayService limite les requêtes simultanées vers le service de passerelle qui gère la soumission et l'évaluation des transactions.
gatewayService: 500
# Puisque tous les nœuds devraient être cohérents, il est recommandé de conserver
# la valeur par défaut de 100 Mo pour MaxRecvMsgSize & MaxSendMsgSize
# Taille maximale du message en octets que le serveur et le client GRPC peuvent recevoir
maxRecvMsgSize: 104857600
# Taille maximale du message en octets que le serveur et le client GRPC peuvent envoyer
maxSendMsgSize: 104857600
###############################################################################
Section VM
############################################################################### vm:
# Point de terminaison du système de gestion vm. Pour docker peut être l'un des suivants en général
# unix:///var/run/docker.sock
# http://localhost:2375
# https://localhost:2376
# Si vous utilisez des constructeurs de chaincode externes et que vous n'avez pas besoin du constructeur de chaincode Docker par défaut,
# le point de terminaison devrait ne pas être configuré afin que le vérificateur de santé Docker du pair ne soit pas enregistré.
endpoint: unix:///var/run/docker.sock
# paramètres pour les vms docker
docker:
tls:
enabled: false
ca:
file: docker/ca.crt
cert:
file: docker/tls.crt
key:
file: docker/tls.key
# Active/désactive la sortie standard/erreur des conteneurs chaincode pour
# des fins de débogage
attachStdout: false
# Paramètres lors de la création du conteneur docker.
# Le conteneur peut être créé efficacement en utilisant ipam & dns-server pour le cluster
# NetworkMode - définit le mode réseau pour le conteneur. Les
# valeurs standard prises en charge sont : `host`(par défaut),`bridge`,`ipvlan`,`none`.
# Dns - une liste de serveurs DNS pour que le conteneur les utilise.
# Note : Les propriétés `Privileged` `Binds` `Links` et `PortBindings` de
# la configuration hôte Docker ne sont pas prises en charge et ne seront pas utilisées si définies.
# LogConfig - définit le pilote de journalisation (Type) et les options
# (Config) pour Docker. Pour plus d'informations,
# https://docs.docker.com/engine/admin/logging/overview/
# Note : Définir LogConfig en utilisant des variables d'environnement n'est pas pris en charge.
hostConfig:
NetworkMode: host
Dns:
# - 192.168.0.1
LogConfig:
Type: json-file
Config:
max-size: "50m"
max-file: "5"
Memory: 2147483648
###############################################################################
Section Chaincode
############################################################################### chaincode:
# L'id est utilisé par le stub de chaincode pour enregistrer le chaincode en cours d'exécution
# ID avec le pair et est généralement fourni via des variables ENV
# la forme `path` de l'ID est fournie lors de l'installation du chaincode.
# Le `name` est utilisé pour toutes les autres requêtes et peut être n'importe quelle chaîne.
id:
path:
name:
# Environnement de construction générique, adapté à la plupart des types de chaincode
builder: $(DOCKER_NS)/fabric-ccenv:$(TWO_DIGIT_VERSION)
# Active/désactive le téléchargement forcé des images docker de base (répertoriées ci-dessous)
# lors de l'instanciation du chaincode utilisateur.
# Utile lors de l'utilisation de balises d'image mobiles (telles que :latest)
pull: false
golang:
# golang n'aura jamais besoin de plus que baseos
runtime: $(DOCKER_NS)/fabric-baseos:$(TWO_DIGIT_VERSION)
# si oui ou non le chaincode golang doit être lié dynamiquement
dynamicLink: false
java:
# C'est une image basée sur java:openjdk-8 avec des outils de compilation
# supplémentaires ajoutés pour l'emballage de la couche shim java.
# Cette image est emballée avec les bibliothèques de couche shim nécessaires
# pour l'exécution du chaincode Java.
runtime: $(DOCKER_NS)/fabric-javaenv:$(TWO_DIGIT_VERSION)
node:
# C'est une image basée sur node:$(NODE_VER)-alpine
runtime: $(DOCKER_NS)/fabric-nodeenv:$(TWO_DIGIT_VERSION)
# Liste des répertoires à traiter comme des constructeurs et lanceurs externes pour
# chaincode. Le traitement de détection de constructeur externe itérera sur les
# constructeurs dans l'ordre spécifié ci-dessous.
# Si vous n'avez pas besoin de revenir au constructeur Docker par défaut, désactivez également vm.endpoint ci-dessus.
# Pour remplacer cette propriété via une variable d'environnement, utilisez CORE_CHAINCODE_EXTERNALBUILDERS: [{name: x, path: dir1}, {name: y, path: dir2}]
externalBuilders:
- name: ccaas_builder
path: /opt/hyperledger/ccaas_builder
propagateEnvironment:
- CHAINCODE_AS_A_SERVICE_BUILDER_CONFIG
# La durée maximale d'attente pour que le processus de construction et d'installation du chaincode
# soit terminé.
installTimeout: 300s
# Durée d'attente pour le démarrage d'un conteneur et l'attente de Register
# à traverser.
startuptimeout: 300s
# Durée d'attente pour les appels Invoke et Init pour éviter les problèmes.
# Ce délai d'attente est utilisé par tous les chaincodes dans tous les canaux, y compris
# les chaincodes système.
# Notez que pendant Invoke, si l'image n'est pas disponible (par exemple en train d'être
# nettoyée dans un environnement de développement), le pair construira automatiquement
# l'image, ce qui pourrait prendre plus de temps. Dans un environnement de production,
# l'image du chaincode est peu susceptible d'être supprimée, donc le délai d'attente pourrait être
# réduit en conséquence.
executetimeout: 30s
# Il y a 2 modes : "dev" et "net".
# En mode dev, l'utilisateur exécute le chaincode après avoir démarré le pair à partir de
# ligne de commande sur la machine locale.
# En mode net, le pair exécutera le chaincode dans un conteneur docker.
mode: net
# maintien de connexion en secondes. Dans les situations où la communication passe par un
# proxy qui ne prend pas en charge le maintien de connexion, ce paramètre maintiendra la connexion
# entre le pair et le chaincode.
# Une valeur <= 0 désactive le maintien de connexion
keepalive: 0
# chaincodes système activés
system:
_lifecycle: enable
cscc: enable
lscc: enable
qscc: enable
# Section de journalisation pour le conteneur chaincode
logging:
# Niveau par défaut pour tous les journaux dans le conteneur chaincode
level: info
# Remplacer le niveau par défaut pour le journal 'shim'
shim: warning
# Format pour les journaux du conteneur chaincode
format: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'
###############################################################################
Section Registre - la configuration du registre englobe à la fois la blockchain
et l'état
############################################################################### ledger:
blockchain:
state: # stateDatabase - les options sont "goleveldb", "CouchDB" # goleveldb - base de données d'état par défaut stockée dans goleveldb. # CouchDB - stocker la base de données d'état dans CouchDB stateDatabase: goleveldb # Limite sur le nombre d'enregistrements à retourner par requête totalQueryLimit: 100000 couchDBConfig: # Il est recommandé d'exécuter CouchDB sur le même serveur que le pair, et # de ne pas mapper le port conteneur CouchDB vers un port serveur dans docker-compose. # Sinon une sécurité appropriée doit être fournie sur la connexion entre # le client CouchDB (sur le pair) et le serveur. couchDBAddress: 127.0.0.1:5984 # Cet utilisateur doit avoir les autorités de lecture et d'écriture sur CouchDB username: # Le mot de passe est recommandé d'être transmis comme variable d'environnement # lors du démarrage (par exemple CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD). # S'il est stocké ici, le fichier doit être protégé par un contrôle d'accès # pour empêcher des utilisateurs non intentionnels de découvrir le mot de passe. password: # Nombre de nouvelles tentatives pour les erreurs CouchDB maxRetries: 3 # Nombre de nouvelles tentatives pour les erreurs CouchDB pendant le démarrage du pair. # Le délai entre les tentatives double à chaque tentative. # La valeur par défaut de 10 tentatives donne 11 tentatives sur 2 minutes. maxRetriesOnStartup: 10 # Délai de requête CouchDB (unité : durée, par exemple 20s) requestTimeout: 35s # Limite sur le nombre d'enregistrements par chaque requête CouchDB # Notez que les requêtes chaincode sont uniquement limitées par totalQueryLimit. # En interne le chaincode peut exécuter plusieurs requêtes CouchDB, # chacune de taille internalQueryLimit. internalQueryLimit: 1000 # Limite sur le nombre d'enregistrements par lot de mise à jour CouchDB maxBatchUpdateSize: 1000 # Créer la base de données système _global_changes # C'est facultatif. Créer la base de données de changements globaux nécessitera # des ressources système supplémentaires pour suivre les changements et maintenir la base de données createGlobalChangesDB: false # CacheSize indique le nombre maximum de mégaoctets (Mo) à allouer pour le cache d'état # en mémoire. Notez que CacheSize doit être un multiple de 32 Mo. S'il n'est pas un multiple # de 32 Mo, le pair arrondira la taille au multiple de 32 Mo suivant. # Pour désactiver le cache, 0 Mo doivent être affectés à cacheSize. cacheSize: 64
history: # enableHistoryDatabase - les options sont true ou false # Indique si l'historique des mises à jour de clés doit être stocké. # Tous les index d'historique seront stockés dans goleveldb, quelle que soit l'utilisation # de CouchDB ou d'une base de données alternative pour l'état. enableHistoryDatabase: true
pvtdataStore: # la taille maximale du lot de base de données pour convertir # les entrées de données manquantes non éligibles en entrées de données manquantes éligibles collElgProcMaxDbBatchSize: 5000 # la durée minimale (en millisecondes) entre l'écriture # de deux lots de base de données consécutifs pour convertir les entrées de données manquantes non éligibles en entrées de données manquantes éligibles collElgProcDbBatchesInterval: 1000 # Les entrées de données manquantes sont classées en deux catégories : # (1) priorisées # (2) dépriorisées # Initialement, toutes les données manquantes sont dans la liste priorisée. Quand le # réconciliateur est incapable de récupérer les données manquantes auprès d'autres pairs, # les données manquantes non réconciliées seraient déplacées vers la liste dépriorisée. # Le réconciliateur réessaiera les données manquantes dépriorisées après chaque # deprioritizedDataReconcilerInterval (unité : minutes). Notez que l' # intervalle doit être supérieur à reconcileSleepInterval deprioritizedDataReconcilerInterval: 60m
snapshots: # Chemin sur le système de fichiers où le pair stockera les instantanés du registre rootDir: /var/hyperledger/production/snapshots/org1-peer1
###############################################################################
Section Opérations
############################################################################### operations: # hôte et port pour le serveur d'opérations listenAddress: 127.0.0.1:9447
# Configuration TLS pour le point de terminaison des opérations
tls:
# TLS activé
enabled: false
# chemin vers le certificat de serveur PEM encodé pour le serveur d'opérations
cert:
file:
# chemin vers la clé de serveur PEM encodée pour le serveur d'opérations
key:
file:
# la plupart des points de terminaison de service d'opérations exigent l'authentification client lorsque TLS
# est activé. clientAuthRequired exige l'authentification par certificat client
# au niveau TLS pour accéder à toutes les ressources.
clientAuthRequired: false
# chemins vers les certificats CA PEM encodés à faire confiance pour l'authentification client
clientRootCAs:
files: []
###############################################################################
Section Métriques
############################################################################### metrics: # le fournisseur de métriques est l'un de statsd, prometheus, ou désactivé provider: disabled
# configuration statsd
statsd:
# type de réseau : tcp ou udp
network: udp
# adresse du serveur statsd
address: 127.0.0.1:8126
# l'intervalle auquel les compteurs et jauges mis en cache localement sont poussés
# vers statsd ; les temporisations sont poussées immédiatement
writeInterval: 10s
# le préfixe est ajouté à toutes les métriques statsd émises
prefix:
Démarrer le nœud org1-peer1 : ```
nohup ./peer node start > org1-peer1.log 2>&1 &
Déploiement du nœud org2-peer0
Éditer le fichier core.yaml : ```
Copyright IBM Corp. Tous droits réservés.
SPDX-License-Identifier: Apache-2.0
###############################################################################
Section Pair
############################################################################### peer:
# L'identifiant pair fournit un nom pour cette instance pair et est utilisé lors
# du nommage des ressources docker.
id: peer0.org2.example.com
# Le networkId permet une séparation logique des réseaux et est utilisé lors
# du nommage des ressources docker.
networkId: dev
# L'adresse de l'interface réseau locale sur laquelle ce pair écoutera.
# Par défaut, il écoutera sur toutes les interfaces réseau
listenAddress: 192.168.1.66:9051
# Le point de terminaison que ce pair utilise pour écouter les connexions chaincode entrantes.
# Si ceci est commenté, l'adresse d'écoute est sélectionnée pour être
# l'adresse du pair (voir ci-dessous) avec le port 7052
chaincodeListenAddress: 192.168.1.66:7055
# Le point de terminaison que le chaincode pour ce pair utilise pour se connecter au pair.
# Si ce n'est pas spécifié, l'adresse chaincodeListenAddress est sélectionnée.
# Et si chaincodeListenAddress n'est pas spécifié, l'adresse est sélectionnée à partir de
# l'adresse pair (voir ci-dessous). Si l'adresse pair spécifiée est invalide alors elle
# reviendra à l'IP détectée automatiquement (IP locale) quelle que soit la valeur de
# addressAutoDetect du pair.
chaincodeAddress: 192.168.1.66:7055
# Lorsqu'utilisé comme configuration pair, cela représente le point de terminaison vers d'autres pairs
# dans la même organisation. Pour les pairs dans d'autres organisations, voir
# gossip.externalEndpoint pour plus d'informations.
# Lorsqu'utilisé comme configuration CLI, cela signifie le point de terminaison pair pour interagir avec
address: 192.168.1.66:9051
# Si le pair doit déterminer programmatiquement son adresse
# Ce cas est utile pour les conteneurs docker.
# Lorsqu'il est défini sur true, cela remplacera l'adresse pair.
addressAutoDetect: false
# Paramètres pour le serveur passerelle du pair.
gateway:
# Si la passerelle est activée pour ce pair.
enabled: true
# endorsementTimeout est la durée pendant laquelle la passerelle attend une réponse
# des autres pairs approuvant avant de retourner une erreur de délai d'attente au client.
endorsementTimeout: 30s
# dialTimeout est la durée pendant laquelle la passerelle attend une connexion
# aux autres nœuds du réseau.
dialTimeout: 2m
# Paramètres de maintien de connexion pour le serveur pair et les clients
keepalive:
# L'intervalle est la durée après laquelle si le serveur ne voit
# aucune activité du client, il envoie un ping au client pour voir s'il est vivant
interval: 7200s
# Le délai d'expiration est la durée pendant laquelle le serveur attend une réponse
# du client après avoir envoyé un ping avant de fermer la connexion
timeout: 20s
# MinInterval est le temps minimum autorisé entre les pings clients.
# Si les clients envoient des pings plus fréquemment, le serveur pair
# les déconnectera
minInterval: 60s
# Paramètres de maintien de connexion client pour communiquer avec d'autres nœuds pairs
client:
# L'intervalle est le temps entre les pings vers les nœuds pairs. Cela doit
# être supérieur ou égal au minInterval spécifié par les
# nœuds pairs
interval: 60s
# Le délai d'expiration est la durée pendant laquelle le client attend une réponse de
# nœuds pairs avant de fermer la connexion
timeout: 20s
# Paramètres de maintien de connexion DeliveryClient pour la communication avec les nœuds
# d'ordonnancement.
deliveryClient:
# L'intervalle est le temps entre les pings vers les nœuds d'ordonnancement. Cela doit
# être supérieur ou égal au minInterval spécifié par les
# nœuds d'ordonnancement.
interval: 60s
# Le délai d'expiration est la durée pendant laquelle le client attend une réponse de
# nœuds d'ordonnancement avant de fermer la connexion
timeout: 20s
# Configuration liée à la diffusion
gossip:
# Ensemble d'amorçage pour initialiser la diffusion avec.
# C'est une liste d'autres pairs que ce pair contacte au démarrage.
# Important : Les points de terminaison ici doivent être des points de terminaison de pairs dans la même
# organisation, car le pair refuserait de se connecter à ces points de terminaison
# sauf s'ils sont dans la même organisation que le pair.
bootstrap: 192.168.1.66:9051
# NOTE : orgLeader et useLeaderElection sont mutuellement exclusifs.
# Les définir tous deux à true entraînerait l'arrêt du pair
# puisque c'est un état indéfini. Si les pairs sont configurés avec
# useLeaderElection=false, assurez-vous qu'il y a au moins 1 pair dans l'
# organisation dont orgLeader est défini sur true.
# Définit si le pair initialisera un algorithme dynamique pour
# la sélection du "leader", où le leader est le pair qui établit
# la connexion avec le service d'ordonnancement et utilise le protocole
# de livraison pour extraire les blocs de registre du service d'ordonnancement.
useLeaderElection: false
# Définit statiquement le pair comme "leader" d'une organisation,
# ce qui signifie que le pair actuel maintiendra la connexion
# avec le service d'ordonnancement et diffusera les blocs entre les pairs de
# sa propre organisation. Plusieurs pairs ou tous les pairs d'une organisation
# peuvent être configurés comme leaders d'organisation, afin qu'ils puissent tous
# extraire directement les blocs du service d'ordonnancement.
orgLeader: true
# Intervalle pour les interrogations du traqueur d'appartenance
membershipTrackerInterval: 5s
# Remplace le point de terminaison que le pair publie aux pairs
# dans son organisation. Pour les pairs dans des organisations étrangères
# voir 'externalEndpoint'
endpoint:
# Nombre maximum de blocs stockés en mémoire
maxBlockCountToStore: 10
# Temps maximum entre les poussées de messages consécutives (unité : milliseconde)
maxPropagationBurstLatency: 10ms
# Nombre maximum de messages stockés jusqu'à ce qu'un poussage soit déclenché vers les pairs distants
maxPropagationBurstSize: 10
# Nombre de fois qu'un message est poussé vers les pairs distants
propagateIterations: 1
# Nombre de pairs sélectionnés vers lesquels pousser les messages
propagatePeerNum: 3
# Détermine la fréquence des phases de tirage (unité : seconde)
# Doit être supérieur à digestWaitTime + responseWaitTime
pullInterval: 4s
# Nombre de pairs à partir desquels effectuer le tirage
pullPeerNum: 3
# Détermine la fréquence de tirage des messages d'information d'état provenant des pairs (unité : seconde)
requestStateInfoInterval: 4s
# Détermine la fréquence de poussage des messages d'information d'état vers les pairs (unité : seconde)
publishStateInfoInterval: 4s
# Temps maximum pendant lequel un message d'information d'état est conservé avant expiration
stateInfoRetentionInterval:
# Temps à partir duquel les certificats sont inclus dans les messages Alive (unité : seconde)
publishCertPeriod: 10s
# Devons-nous ignorer la vérification des messages de bloc ou non (actuellement non utilisé)
skipBlockVerification: false
# Délai de connexion (unité : seconde)
dialTimeout: 3s
# Délai de connexion (unité : seconde)
connTimeout: 2s
# Taille du tampon des messages reçus
recvBuffSize: 20
# Taille du tampon des messages envoyés
sendBuffSize: 200
# Temps d'attente avant que le moteur de tirage traite les résumés entrants (unité : seconde)
# Devrait être légèrement inférieur à requestWaitTime
digestWaitTime: 1s
# Temps d'attente avant que le moteur de tirage supprime le nonce entrant (unité : millisecondes)
# Devrait être légèrement supérieur à digestWaitTime
requestWaitTime: 1500ms
# Temps d'attente avant que le moteur de tirage termine le tirage (unité : seconde)
responseWaitTime: 2s
# Intervalle de vérification de vie (unité : seconde)
aliveTimeInterval: 5s
# Délai d'expiration de vie (unité : seconde)
aliveExpirationTimeout: 25s
# Intervalle de reconnexion (unité : seconde)
reconnectInterval: 25s
# Nombre maximum de tentatives de connexion à un pair
maxConnectionAttempts: 120
# Facteur d'expiration des messages pour les messages de vie
msgExpirationFactor: 20
# Ceci est un point de terminaison publié aux pairs en dehors de l'organisation.
# Si ce n'est pas défini, le pair ne sera pas connu des autres organisations.
externalEndpoint:
# Configuration du service d'élection de leader
election:
# Temps le plus long que le pair attend pour une appartenance stable pendant le démarrage de l'élection de leader (unité : seconde)
startupGracePeriod: 15s
# Intervalle des échantillons d'appartenance de diffusion pour vérifier sa stabilité (unité : seconde)
membershipSampleInterval: 1s
# Temps écoulé depuis le dernier message de déclaration avant que le pair décide d'effectuer l'élection de leader (unité : seconde)
leaderAliveThreshold: 10s
# Temps entre l'envoi du message de proposition par le pair et sa déclaration comme leader (envoi du message de déclaration) (unité : seconde)
leaderElectionDuration: 5s
pvtData:
# pullRetryThreshold détermine la durée maximale pendant laquelle les données privées correspondant à un bloc donné
# seront tentées d'être extraites des pairs jusqu'à ce que le bloc soit validé sans les données privées
pullRetryThreshold: 60s
# Lorsque les données privées entrent dans le magasin temporaire, elles sont associées à la hauteur du registre du pair à ce moment-là.
# transientstoreMaxBlockRetention définit la différence maximale entre la hauteur actuelle du registre lors de la validation,
# et les données privées résidant dans le magasin temporaire qui sont garanties de ne pas être purgées.
# Les données privées sont purgées du magasin temporaire lorsque des blocs avec des séquences qui sont des multiples
# de transientstoreMaxBlockRetention sont validés.
transientstoreMaxBlockRetention: 1000
# pushAckTimeout est le temps maximum d'attente pour une reconnaissance de chaque pair
# lors de la poussée des données privées au moment de l'appui.
pushAckTimeout: 3s
# Marge de tirage Block to live, utilisée comme tampon
# pour empêcher le pair d'essayer de tirer les données privées
# des pairs qui seront bientôt purgées dans les N prochains blocs.
# Cela aide un pair nouvellement joint à rattraper plus rapidement
# la hauteur actuelle de la blockchain.
btlPullMargin: 10
# le processus de réconciliation est effectué dans une boucle infinie, tandis que dans chaque itération le réconciliateur essaie de
# tirer des autres pairs les blocs manquants les plus récents avec une limitation de taille de lot maximale.
# reconcileBatchSize détermine la taille de lot maximale des données privées manquantes qui seront réconciliées dans une
# seule itération.
reconcileBatchSize: 10
# reconcileSleepInterval détermine le temps que le réconciliateur dort de la fin d'une itération jusqu'au début
# de la prochaine itération de réconciliation.
reconcileSleepInterval: 1m
# reconciliationEnabled est un indicateur qui indique si la réconciliation des données privées est activée ou non.
reconciliationEnabled: true
# skipPullingInvalidTransactionsDuringCommit est un indicateur qui indique si le tirage des données privées
# des transactions invalides provenant d'autres pairs doit être ignoré pendant le temps de validation et tiré
# uniquement via le réconciliateur.
skipPullingInvalidTransactionsDuringCommit: false
# implicitCollectionDisseminationPolicy spécifie la politique de dissémination pour la collection implicite propre au pair.
# Lorsqu'un pair approuve une proposition qui écrit dans sa propre collection implicite, les valeurs ci-dessous remplacent les valeurs par défaut
# pour la dissémination des données privées.
# Notez que cela s'applique à tous les canaux auxquels le pair a rejoint. L'implication est que requiredPeerCount doit
# être inférieur au nombre de pairs dans un canal qui a le plus petit nombre de pairs de l'organisation.
implicitCollectionDisseminationPolicy:
# requiredPeerCount définit le nombre minimum de pairs éligibles auxquels le pair doit réussir
# à disséminer les données privées pour sa propre collection implicite lors de l'appui. La valeur par défaut est 0.
requiredPeerCount: 0
# maxPeerCount définit le nombre maximum de pairs éligibles auxquels le pair tentera de
# disséminer les données privées pour sa propre collection implicite lors de l'appui. La valeur par défaut est 1.
maxPeerCount: 1
# Configuration liée au transfert d'état de la diffusion
state:
# indique si le transfert d'état est activé ou non
# la valeur par défaut est false, c'est-à-dire que le transfert d'état est actif
# et veille à synchroniser les blocs manquants permettant
# au pair en retard de rattraper la vitesse du reste du réseau.
# Gardez à l'esprit que lorsque peer.gossip.useLeaderElection est vrai
# et qu'il y a plusieurs pairs dans l'organisation,
# ou peer.gossip.useLeaderElection est faux ainsi que
# peer.gossip.orgleader étant faux, le registre du pair peut être en retard
# par rapport aux autres pairs et ne rattrapera jamais le rythme en raison du transfert d'état
# étant désactivé.
enabled: false
# checkInterval intervalle pour vérifier si le pair est suffisamment en retard pour
# demander des blocs via le transfert d'état d'un autre pair.
checkInterval: 10s
# responseTimeout durée d'attente pour la réponse de transfert d'état de
# autres pairs
responseTimeout: 3s
# batchSize le nombre de blocs à demander via le transfert d'état d'un autre pair
batchSize: 10
# blockBufferSize reflète la taille du tampon de réordonnancement
# qui capture les blocs et veille à les livrer dans l'ordre
# vers la couche de registre. La taille réelle du tampon est bornée entre
# 0 et 2*blockBufferSize, chaque canal maintient son propre tampon
blockBufferSize: 20
# maxRetries nombre maximum de nouvelles tentatives pour demander
# une seule requête de transfert d'état
maxRetries: 3
# Paramètres TLS
tls:
# Exiger le TLS côté serveur
enabled: true
# Exiger les certificats clients / TLS mutuel pour les connexions entrantes.
# Notez que les clients qui ne sont pas configurés pour utiliser un certificat
# échoueront à se connecter au pair.
clientAuthRequired: false
# Certificat X.509 utilisé pour le serveur TLS
cert:
file: /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org2.example.com/pairs/peer0.org2.example.com/tls/server.crt
# Clé privée utilisée pour le serveur TLS
key:
file: /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org2.example.com/pairs/peer0.org2.example.com/tls/server.key
# rootcert.file représente la chaîne de certificats racines de confiance utilisée pour vérifier les certificats
# des autres nœuds lors des connexions sortantes.
# Il n'est pas nécessaire de le définir, mais il peut être utilisé pour compléter l'ensemble des certificats TLS CA
# disponibles à partir des MSP de chaque configuration de canal.
rootcert:
file: /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org2.example.com/pairs/peer0.org2.example.com/tls/ca.crt
# Si le TLS mutuel est activé, clientRootCAs.files contient une liste de certificats racines supplémentaires
# utilisés pour vérifier les certificats des connexions clients.
# Il complète l'ensemble des certificats TLS CA disponibles à partir des MSP de chaque configuration de canal.
# Au minimum, définissez le certificat racine TLS CA de votre organisation afin que le pair puisse recevoir les demandes de jonction de canal.
clientRootCAs:
files:
- /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org2.example.com/pairs/peer0.org2.example.com/tls/ca.crt
# Clé privée utilisée pour TLS lors des connexions clientes.
# Si non définie, peer.tls.key.file sera utilisé à la place
clientKey:
file:
# Certificat X.509 utilisé pour TLS lors des connexions clientes.
# Si non défini, peer.tls.cert.file sera utilisé à la place
clientCert:
file:
# Authentication contient les paramètres de configuration liés à l'authentification
# des messages clients
authentication:
# la différence acceptable entre l'heure actuelle du serveur et l'
# heure du client comme spécifiée dans un message de demande client
timewindow: 15m
# Chemin sur le système de fichiers où le pair stockera les données (par exemple registre). Cet
# emplacement doit être protégé par un contrôle d'accès pour empêcher toute modification
# non intentionnelle qui pourrait corrompre les opérations du pair.
fileSystemPath: /var/hyperledger/production/org2-peer0
# BCCSP (fournisseur cryptographique Blockchain) : Sélectionnez quelle implémentation ou
# bibliothèque cryptographique utiliser
BCCSP:
Default: SW
# Paramètres pour le fournisseur cryptographique SW (c'est-à-dire lorsque DEFAULT : SW)
SW:
# TODO : Le hachage et le niveau de sécurité par défaut nécessitent une refactorisation pour être
# entièrement configurable. Changer ces valeurs par défaut nécessite une coordination
# SHA2 est codé en dur à plusieurs endroits, pas seulement dans BCCSP
Hash: SHA2
Security: 256
# Emplacement du magasin de clés
FileKeyStore:
# Si "", la valeur par défaut est 'mspConfigPath'/keystore
KeyStore:
# Paramètres pour le fournisseur cryptographique PKCS#11 (c'est-à-dire lorsque DEFAULT : PKCS11)
PKCS11:
# Emplacement de la bibliothèque de module PKCS11
Library:
# Étiquette du jeton
Label:
# Code PIN utilisateur
Pin:
Hash:
Security:
# Chemin sur le système de fichiers où le pair trouvera les configurations MSP locales
mspConfigPath: /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org2.example.com/pairs/peer0.org2.example.com/msp
# Identificateur du MSP local
# ----!!!!IMPORTANT!!!-!!!IMPORTANT!!!-!!!IMPORTANT!!!!----
# Les déploiements doivent changer la valeur de la chaîne localMspId.
# En particulier, le nom de l'ID MSP local d'un pair doit
# correspondre au nom de l'un des MSPs de chaque canal
# auquel ce pair appartient. Sinon, les messages de ce pair
# ne seront pas identifiés comme valides par les autres nœuds.
localMspId: Org2MSP
# Options de configuration client CLI communes
client:
# délai de connexion
connTimeout: 3s
# Configuration liée au service de livraison
deliveryclient:
# Active ce pair pour diffuser les blocs qu'il a extraits du service d'ordonnancement
# via la diffusion.
# Notez que 'gossip.state.enabled' contrôle la réplication de blocs point à point
# des blocs validés dans le passé.
blockGossipEnabled: true
# Définit le temps total que le service de livraison peut passer dans les tentatives de
# reconnexion jusqu'à ce que sa logique de nouvelle tentative abandonne et renvoie une erreur
reconnectTotalTimeThreshold: 3600s
# Définit le délai de connexion du service de livraison <-> service d'ordonnancement
connTimeout: 3s
# Définit le délai maximal du service de livraison entre les nouvelles tentatives consécutives
reConnectBackoffThreshold: 3600s
# Une liste d'adresses de points de terminaison de service d'ordonnancement qui devraient être remplacées
# lorsqu'elles sont trouvées dans les configurations de canal.
addressOverrides:
# - from:
# to:
# caCertsFile:
# - from:
# to:
# caCertsFile:
# Type pour le MSP local - par défaut c'est de type bccsp
localMspType: bccsp
# Utilisé avec les outils de profilage Go uniquement dans un environnement non de production. Dans
# la production, il devrait être désactivé (par exemple enabled : false)
profile:
enabled: false
listenAddress: 0.0.0.0:6060
# Handlers définit des gestionnaires personnalisés qui peuvent filtrer et modifier
# les objets passant dans le pair, tels que :
# Filtre d'authentification - rejeter ou transmettre les propositions des clients
# Décorateurs - ajouter ou modifier l'entrée chaincode transmise au chaincode
# Appuis - Signature personnalisée sur la charge utile de réponse de proposition et sa modification
# Une définition de gestionnaire valide contient :
# - Un nom qui est un nom de méthode de fabrique défini dans
# core/handlers/library/library.go pour les gestionnaires compilés statiquement
# - chemin de bibliothèque vers le binaire objet partagé pour les filtres branchables
# Les filtres d'authentification et les décorateurs sont chaînés et exécutés dans l'ordre
# où ils sont définis. Par exemple :
# authFilters:
# -
# name: FilterOne
# library: /opt/lib/filter.so
# -
# name: FilterTwo
# decorators:
# -
# name: DecoratorOne
# -
# name: DecoratorTwo
# library: /opt/lib/decorator.so
# Les appuis sont configurés en tant que carte dont les clés sont les chaincodes système d'appui qui sont remplacés.
# Ci-dessous un exemple qui remplace l'ESCC par défaut et utilise un plugin d'appui qui a la même fonctionnalité
# que l'ESCC par défaut.
# Si la propriété 'library' est absente, le nom est utilisé comme méthode de constructeur dans la bibliothèque intégrée similaire
# aux filtres d'authentification et aux décorateurs.
# endorsers:
# escc:
# name: DefaultESCC
# library: /etc/hyperledger/fabric/plugin/escc.so
handlers:
authFilters:
-
name: DefaultAuth
-
name: ExpirationCheck # Ce filtre vérifie l'expiration du certificat x509 d'identité
decorators:
-
name: DefaultDecorator
endorsers:
escc:
name: DefaultEndorsement
library:
validators:
vscc:
name: DefaultValidation
library:
# library: /etc/hyperledger/fabric/plugin/escc.so
# Nombre de goroutines qui exécuteront la validation des transactions en parallèle.
# Par défaut, le pair choisit le nombre de processeurs de la machine. Définissez cette
# variable pour remplacer ce choix.
# NOTE : remplacer cette valeur pourrait négativement influencer les performances du
# pair donc veuillez changer cette valeur uniquement si vous savez ce que vous faites
validatorPoolSize:
# Le service de découverte est utilisé par les clients pour interroger des informations sur les pairs,
# telles que - quels pairs ont rejoint un certain canal, quelle est la dernière
# configuration du canal, et surtout - étant donné un chaincode et un canal,
# quels ensembles possibles de pairs satisfont la politique d'appui.
discovery:
enabled: true
# Si le cache d'authentification est activé ou non.
authCacheEnabled: true
# La taille maximale du cache, après quoi un nettoyage a lieu
authCacheMaxSize: 1000
# La proportion (0 à 1) des entrées qui restent dans le cache après que le cache soit nettoyé en raison d'une surpopulation
authCachePurgeRetentionRatio: 0.75
# Si l'on autorise les non-administrateurs à effectuer des requêtes hors périmètre de canal.
# Lorsque c'est faux, cela signifie que seuls les administrateurs de pair peuvent effectuer des requêtes hors périmètre de canal.
orgMembersAllowedAccess: false
# Limits est utilisé pour configurer certaines limites de ressources internes.
limits:
# Concurrency limite le nombre de requêtes simultanément en cours d'exécution vers un service sur chaque pair.
# Actuellement cette option est appliquée uniquement au service d'appui et au service de livraison.
# Lorsque la propriété est absente ou que la valeur est 0, la limite de concurrence est désactivée pour le service.
concurrency:
# endorserService limite les requêtes simultanées vers le service d'appui qui gère le déploiement, la requête et l'invocation de chaincode,
# y compris les chaincodes utilisateur et les chaincodes système.
endorserService: 2500
# deliverService limite les auditeurs d'événements simultanés enregistrés auprès du service de livraison pour les événements de blocs et de transactions.
deliverService: 2500
# gatewayService limite les requêtes simultanées vers le service de passerelle qui gère la soumission et l'évaluation des transactions.
gatewayService: 500
# Puisque tous les nœuds devraient être cohérents, il est recommandé de conserver
# la valeur par défaut de 100 Mo pour MaxRecvMsgSize & MaxSendMsgSize
# Taille maximale du message en octets que le serveur et le client GRPC peuvent recevoir
maxRecvMsgSize: 104857600
# Taille maximale du message en octets que le serveur et le client GRPC peuvent envoyer
maxSendMsgSize: 104857600
###############################################################################
Section VM
############################################################################### vm:
# Point de terminaison du système de gestion vm. Pour docker peut être l'un des suivants en général
# unix:///var/run/docker.sock
# http://localhost:2375
# https://localhost:2376
# Si vous utilisez des constructeurs de chaincode externes et que vous n'avez pas besoin du constructeur de chaincode Docker par défaut,
# le point de terminaison devrait ne pas être configuré afin que le vérificateur de santé Docker du pair ne soit pas enregistré.
endpoint: unix:///var/run/docker.sock
# paramètres pour les vms docker
docker:
tls:
enabled: false
ca:
file: docker/ca.crt
cert:
file: docker/tls.crt
key:
file: docker/tls.key
# Active/désactive la sortie standard/erreur des conteneurs chaincode pour
# des fins de débogage
attachStdout: false
# Paramètres lors de la création du conteneur docker.
# Le conteneur peut être créé efficacement en utilisant ipam & dns-server pour le cluster
# NetworkMode - définit le mode réseau pour le conteneur. Les
# valeurs standard prises en charge sont : `host`(par défaut),`bridge`,`ipvlan`,`none`.
# Dns - une liste de serveurs DNS pour que le conteneur les utilise.
# Note : Les propriétés `Privileged` `Binds` `Links` et `PortBindings` de
# la configuration hôte Docker ne sont pas prises en charge et ne seront pas utilisées si définies.
# LogConfig - définit le pilote de journalisation (Type) et les options
# (Config) pour Docker. Pour plus d'informations,
# https://docs.docker.com/engine/admin/logging/overview/
# Note : Définir LogConfig en utilisant des variables d'environnement n'est pas pris en charge.
hostConfig:
NetworkMode: host
Dns:
# - 192.168.0.1
LogConfig:
Type: json-file
Config:
max-size: "50m"
max-file: "5"
Memory: 2147483648
###############################################################################
Section Chaincode
############################################################################### chaincode:
# L'id est utilisé par le stub de chaincode pour enregistrer le chaincode en cours d'exécution
# ID avec le pair et est généralement fourni via des variables ENV
# la forme `path` de l'ID est fournie lors de l'installation du chaincode.
# Le `name` est utilisé pour toutes les autres requêtes et peut être n'importe quelle chaîne.
id:
path:
name:
# Environnement de construction générique, adapté à la plupart des types de chaincode
builder: $(DOCKER_NS)/fabric-ccenv:$(TWO_DIGIT_VERSION)
# Active/désactive le téléchargement forcé des images docker de base (répertoriées ci-dessous)
# lors de l'instanciation du chaincode utilisateur.
# Utile lors de l'utilisation de balises d'image mobiles (telles que :latest)
pull: false
golang:
# golang n'aura jamais besoin de plus que baseos
runtime: $(DOCKER_NS)/fabric-baseos:$(TWO_DIGIT_VERSION)
# si oui ou non le chaincode golang doit être lié dynamiquement
dynamicLink: false
java:
# C'est une image basée sur java:openjdk-8 avec des outils de compilation
# supplémentaires ajoutés pour l'emballage de la couche shim java.
# Cette image est emballée avec les bibliothèques de couche shim nécessaires
# pour l'exécution du chaincode Java.
runtime: $(DOCKER_NS)/fabric-javaenv:$(TWO_DIGIT_VERSION)
node:
# C'est une image basée sur node:$(NODE_VER)-alpine
runtime: $(DOCKER_NS)/fabric-nodeenv:$(TWO_DIGIT_VERSION)
# Liste des répertoires à traiter comme des constructeurs et lanceurs externes pour
# chaincode. Le traitement de détection de constructeur externe itérera sur les
# constructeurs dans l'ordre spécifié ci-dessous.
# Si vous n'avez pas besoin de revenir au constructeur Docker par défaut, désactivez également vm.endpoint ci-dessus.
# Pour remplacer cette propriété via une variable d'environnement, utilisez CORE_CHAINCODE_EXTERNALBUILDERS: [{name: x, path: dir1}, {name: y, path: dir2}]
externalBuilders:
- name: ccaas_builder
path: /opt/hyperledger/ccaas_builder
propagateEnvironment:
- CHAINCODE_AS_A_SERVICE_BUILDER_CONFIG
# La durée maximale d'attente pour que le processus de construction et d'installation du chaincode
# soit terminé.
installTimeout: 300s
# Durée d'attente pour le démarrage d'un conteneur et l'attente de Register
# à traverser.
startuptimeout: 300s
# Durée d'attente pour les appels Invoke et Init pour éviter les problèmes.
# Ce délai d'attente est utilisé par tous les chaincodes dans tous les canaux, y compris
# les chaincodes système.
# Notez que pendant Invoke, si l'image n'est pas disponible (par exemple en train d'être
# nettoyée dans un environnement de développement), le pair construira automatiquement
# l'image, ce qui pourrait prendre plus de temps. Dans un environnement de production,
# l'image du chaincode est peu susceptible d'être supprimée, donc le délai d'attente pourrait être
# réduit en conséquence.
executetimeout: 30s
# Il y a 2 modes : "dev" et "net".
# En mode dev, l'utilisateur exécute le chaincode après avoir démarré le pair à partir de
# ligne de commande sur la machine locale.
# En mode net, le pair exécutera le chaincode dans un conteneur docker.
mode: net
# maintien de connexion en secondes. Dans les situations où la communication passe par un
# proxy qui ne prend pas en charge le maintien de connexion, ce paramètre maintiendra la connexion
# entre le pair et le chaincode.
# Une valeur <= 0 désactive le maintien de connexion
keepalive: 0
# chaincodes système activés
system:
_lifecycle: enable
cscc: enable
lscc: enable
qscc: enable
# Section de journalisation pour le conteneur chaincode
logging:
# Niveau par défaut pour tous les journaux dans le conteneur chaincode
level: info
# Remplacer le niveau par défaut pour le journal 'shim'
shim: warning
# Format pour les journaux du conteneur chaincode
format: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'
###############################################################################
Section Registre - la configuration du registre englobe à la fois la blockchain
et l'état
############################################################################### ledger:
blockchain:
state: # stateDatabase - les options sont "goleveldb", "CouchDB" # goleveldb - base de données d'état par défaut stockée dans goleveldb. # CouchDB - stocker la base de données d'état dans CouchDB stateDatabase: goleveldb # Limite sur le nombre d'enregistrements à retourner par requête totalQueryLimit: 100000 couchDBConfig: # Il est recommandé d'exécuter CouchDB sur le même serveur que le pair, et # de ne pas mapper le port conteneur CouchDB vers un port serveur dans docker-compose. # Sinon une sécurité appropriée doit être fournie sur la connexion entre # le client CouchDB (sur le pair) et le serveur. couchDBAddress: 127.0.0.1:5984 # Cet utilisateur doit avoir les autorités de lecture et d'écriture sur CouchDB username: # Le mot de passe est recommandé d'être transmis comme variable d'environnement # lors du démarrage (par exemple CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD). # S'il est stocké ici, le fichier doit être protégé par un contrôle d'accès # pour empêcher des utilisateurs non intentionnels de découvrir le mot de passe. password: # Nombre de nouvelles tentatives pour les erreurs CouchDB maxRetries: 3 # Nombre de nouvelles tentatives pour les erreurs CouchDB pendant le démarrage du pair. # Le délai entre les tentatives double à chaque tentative. # La valeur par défaut de 10 tentatives donne 11 tentatives sur 2 minutes. maxRetriesOnStartup: 10 # Délai de requête CouchDB (unité : durée, par exemple 20s) requestTimeout: 35s # Limite sur le nombre d'enregistrements par chaque requête CouchDB # Notez que les requêtes chaincode sont uniquement limitées par totalQueryLimit. # En interne le chaincode peut exécuter plusieurs requêtes CouchDB, # chacune de taille internalQueryLimit. internalQueryLimit: 1000 # Limite sur le nombre d'enregistrements par lot de mise à jour CouchDB maxBatchUpdateSize: 1000 # Créer la base de données système _global_changes # C'est facultatif. Créer la base de données de changements globaux nécessitera # des ressources système supplémentaires pour suivre les changements et maintenir la base de données createGlobalChangesDB: false # CacheSize indique le nombre maximum de mégaoctets (Mo) à allouer pour le cache d'état # en mémoire. Notez que CacheSize doit être un multiple de 32 Mo. S'il n'est pas un multiple # de 32 Mo, le pair arrondira la taille au multiple de 32 Mo suivant. # Pour désactiver le cache, 0 Mo doivent être affectés à cacheSize. cacheSize: 64
history: # enableHistoryDatabase - les options sont true ou false # Indique si l'historique des mises à jour de clés doit être stocké. # Tous les index d'historique seront stockés dans goleveldb, quelle que soit l'utilisation # de CouchDB ou d'une base de données alternative pour l'état. enableHistoryDatabase: true
pvtdataStore: # la taille maximale du lot de base de données pour convertir # les entrées de données manquantes non éligibles en entrées de données manquantes éligibles collElgProcMaxDbBatchSize: 5000 # la durée minimale (en millisecondes) entre l'écriture # de deux lots de base de données consécutifs pour convertir les entrées de données manquantes non éligibles en entrées de données manquantes éligibles collElgProcDbBatchesInterval: 1000 # Les entrées de données manquantes sont classées en deux catégories : # (1) priorisées # (2) dépriorisées # Initialement, toutes les données manquantes sont dans la liste priorisée. Quand le # réconciliateur est incapable de récupérer les données manquantes auprès d'autres pairs, # les données manquantes non réconciliées seraient déplacées vers la liste dépriorisée. # Le réconciliateur réessaiera les données manquantes dépriorisées après chaque # deprioritizedDataReconcilerInterval (unité : minutes). Notez que l' # intervalle doit être supérieur à reconcileSleepInterval deprioritizedDataReconcilerInterval: 60m
snapshots: # Chemin sur le système de fichiers où le pair stockera les instantanés du registre rootDir: /var/hyperledger/production/snapshots/org2-peer0
###############################################################################
Section Opérations
############################################################################### operations: # hôte et port pour le serveur d'opérations listenAddress: 127.0.0.1:9448
# Configuration TLS pour le point de terminaison des opérations
tls:
# TLS activé
enabled: false
# chemin vers le certificat de serveur PEM encodé pour le serveur d'opérations
cert:
file:
# chemin vers la clé de serveur PEM encodée pour le serveur d'opérations
key:
file:
# la plupart des points de terminaison de service d'opérations exigent l'authentification client lorsque TLS
# est activé. clientAuthRequired exige l'authentification par certificat client
# au niveau TLS pour accéder à toutes les ressources.
clientAuthRequired: false
# chemins vers les certificats CA PEM encodés à faire confiance pour l'authentification client
clientRootCAs:
files: []
###############################################################################
Section Métriques
############################################################################### metrics: # le fournisseur de métriques est l'un de statsd, prometheus, ou désactivé provider: disabled
# configuration statsd
statsd:
# type de réseau : tcp ou udp
network: udp
# adresse du serveur statsd
address: 127.0.0.1:8127
# l'intervalle auquel les compteurs et jauges mis en cache localement sont poussés
# vers statsd ; les temporisations sont poussées immédiatement
writeInterval: 10s
# le préfixe est ajouté à toutes les métriques statsd émises
prefix:
Démarrer le nœud org2-peer0 : ```
nohup ./peer node start > org2-peer0.log 2>&1 &
Déploiement du nœud org2-peer1
Éditer le fichier core.yaml : ```
Copyright IBM Corp. Tous droits réservés.
SPDX-License-Identifier: Apache-2.0
###############################################################################
Section Pair
############################################################################### peer:
# L'identifiant pair fournit un nom pour cette instance pair et est utilisé lors
# du nommage des ressources docker.
id: peer1.org2.example.com
# Le networkId permet une séparation logique des réseaux et est utilisé lors
# du nommage des ressources docker.
networkId: dev
# L'adresse de l'interface réseau locale sur laquelle ce pair écoutera.
# Par défaut, il écoutera sur toutes les interfaces réseau
listenAddress: 192.168.1.66:10051
# Le point de terminaison que ce pair utilise pour écouter les connexions chaincode entrantes.
# Si ceci est commenté, l'adresse d'écoute est sélectionnée pour être
# l'adresse du pair (voir ci-dessous) avec le port 7052
chaincodeListenAddress: 192.168.1.66:7056
# Le point de terminaison que le chaincode pour ce pair utilise pour se connecter au pair.
# Si ce n'est pas spécifié, l'adresse chaincodeListenAddress est sélectionnée.
# Et si chaincodeListenAddress n'est pas spécifié, l'adresse est sélectionnée à partir de
# l'adresse pair (voir ci-dessous). Si l'adresse pair spécifiée est invalide alors elle
# reviendra à l'IP détectée automatiquement (IP locale) quelle que soit la valeur de
# addressAutoDetect du pair.
chaincodeAddress: 192.168.1.66:7056
# Lorsqu'utilisé comme configuration pair, cela représente le point de terminaison vers d'autres pairs
# dans la même organisation. Pour les pairs dans d'autres organisations, voir
# gossip.externalEndpoint pour plus d'informations.
# Lorsqu'utilisé comme configuration CLI, cela signifie le point de terminaison pair pour interagir avec
address: 192.168.1.66:10051
# Si le pair doit déterminer programmatiquement son adresse
# Ce cas est utile pour les conteneurs docker.
# Lorsqu'il est défini sur true, cela remplacera l'adresse pair.
addressAutoDetect: false
# Paramètres pour le serveur passerelle du pair.
gateway:
# Si la passerelle est activée pour ce pair.
enabled: true
# endorsementTimeout est la durée pendant laquelle la passerelle attend une réponse
# des autres pairs approuvant avant de retourner une erreur de délai d'attente au client.
endorsementTimeout: 30s
# dialTimeout est la durée pendant laquelle la passerelle attend une connexion
# aux autres nœuds du réseau.
dialTimeout: 2m
# Paramètres de maintien de connexion pour le serveur pair et les clients
keepalive:
# L'intervalle est la durée après laquelle si le serveur ne voit
# aucune activité du client, il envoie un ping au client pour voir s'il est vivant
interval: 7200s
# Le délai d'expiration est la durée pendant laquelle le serveur attend une réponse
# du client après avoir envoyé un ping avant de fermer la connexion
timeout: 20s
# MinInterval est le temps minimum autorisé entre les pings clients.
# Si les clients envoient des pings plus fréquemment, le serveur pair
# les déconnectera
minInterval: 60s
# Paramètres de maintien de connexion client pour communiquer avec d'autres nœuds pairs
client:
# L'intervalle est le temps entre les pings vers les nœuds pairs. Cela doit
# être supérieur ou égal au minInterval spécifié par les
# nœuds pairs
interval: 60s
# Le délai d'expiration est la durée pendant laquelle le client attend une réponse de
# nœuds pairs avant de fermer la connexion
timeout: 20s
# Paramètres de maintien de connexion DeliveryClient pour la communication avec les nœuds
# d'ordonnancement.
deliveryClient:
# L'intervalle est le temps entre les pings vers les nœuds d'ordonnancement. Cela doit
# être supérieur ou égal au minInterval spécifié par les
# nœuds d'ordonnancement.
interval: 60s
# Le délai d'expiration est la durée pendant laquelle le client attend une réponse de
# nœuds d'ordonnancement avant de fermer la connexion
timeout: 20s
# Configuration liée à la diffusion
gossip:
# Ensemble d'amorçage pour initialiser la diffusion avec.
# C'est une liste d'autres pairs que ce pair contacte au démarrage.
# Important : Les points de terminaison ici doivent être des points de terminaison de pairs dans la même
# organisation, car le pair refuserait de se connecter à ces points de terminaison
# sauf s'ils sont dans la même organisation que le pair.
bootstrap: 192.168.1.66:10051
# NOTE : orgLeader et useLeaderElection sont mutuellement exclusifs.
# Les définir tous deux à true entraînerait l'arrêt du pair
# puisque c'est un état indéfini. Si les pairs sont configurés avec
# useLeaderElection=false, assurez-vous qu'il y a au moins 1 pair dans l'
# organisation dont orgLeader est défini sur true.
# Définit si le pair initialisera un algorithme dynamique pour
# la sélection du "leader", où le leader est le pair qui établit
# la connexion avec le service d'ordonnancement et utilise le protocole
# de livraison pour extraire les blocs de registre du service d'ordonnancement.
useLeaderElection: false
# Définit statiquement le pair comme "leader" d'une organisation,
# ce qui signifie que le pair actuel maintiendra la connexion
# avec le service d'ordonnancement et diffusera les blocs entre les pairs de
# sa propre organisation. Plusieurs pairs ou tous les pairs d'une organisation
# peuvent être configurés comme leaders d'organisation, afin qu'ils puissent tous
# extraire directement les blocs du service d'ordonnancement.
orgLeader: true
# Intervalle pour les interrogations du traqueur d'appartenance
membershipTrackerInterval: 5s
# Remplace le point de terminaison que le pair publie aux pairs
# dans son organisation. Pour les pairs dans des organisations étrangères
# voir 'externalEndpoint'
endpoint:
# Nombre maximum de blocs stockés en mémoire
maxBlockCountToStore: 10
# Temps maximum entre les poussées de messages consécutives (unité : milliseconde)
maxPropagationBurstLatency: 10ms
# Nombre maximum de messages stockés jusqu'à ce qu'un poussage soit déclenché vers les pairs distants
maxPropagationBurstSize: 10
# Nombre de fois qu'un message est poussé vers les pairs distants
propagateIterations: 1
# Nombre de pairs sélectionnés vers lesquels pousser les messages
propagatePeerNum: 3
# Détermine la fréquence des phases de tirage (unité : seconde)
# Doit être supérieur à digestWaitTime + responseWaitTime
pullInterval: 4s
# Nombre de pairs à partir desquels effectuer le tirage
pullPeerNum: 3
# Détermine la fréquence de tirage des messages d'information d'état provenant des pairs (unité : seconde)
requestStateInfoInterval: 4s
# Détermine la fréquence de poussage des messages d'information d'état vers les pairs (unité : seconde)
publishStateInfoInterval: 4s
# Temps maximum pendant lequel un message d'information d'état est conservé avant expiration
stateInfoRetentionInterval:
# Temps à partir duquel les certificats sont inclus dans les messages Alive (unité : seconde)
publishCertPeriod: 10s
# Devons-nous ignorer la vérification des messages de bloc ou non (actuellement non utilisé)
skipBlockVerification: false
# Délai de connexion (unité : seconde)
dialTimeout: 3s
# Délai de connexion (unité : seconde)
connTimeout: 2s
# Taille du tampon des messages reçus
recvBuffSize: 20
# Taille du tampon des messages envoyés
sendBuffSize: 200
# Temps d'attente avant que le moteur de tirage traite les résumés entrants (unité : seconde)
# Devrait être légèrement inférieur à requestWaitTime
digestWaitTime: 1s
# Temps d'attente avant que le moteur de tirage supprime le nonce entrant (unité : millisecondes)
# Devrait être légèrement supérieur à digestWaitTime
requestWaitTime: 1500ms
# Temps d'attente avant que le moteur de tirage termine le tirage (unité : seconde)
responseWaitTime: 2s
# Intervalle de vérification de vie (unité : seconde)
aliveTimeInterval: 5s
# Délai d'expiration de vie (unité : seconde)
aliveExpirationTimeout: 25s
# Intervalle de reconnexion (unité : seconde)
reconnectInterval: 25s
# Nombre maximum de tentatives de connexion à un pair
maxConnectionAttempts: 120
# Facteur d'expiration des messages pour les messages de vie
msgExpirationFactor: 20
# Ceci est un point de terminaison publié aux pairs en dehors de l'organisation.
# Si ce n'est pas défini, le pair ne sera pas connu des autres organisations.
externalEndpoint:
# Configuration du service d'élection de leader
election:
# Temps le plus long que le pair attend pour une appartenance stable pendant le démarrage de l'élection de leader (unité : seconde)
startupGracePeriod: 15s
# Intervalle des échantillons d'appartenance de diffusion pour vérifier sa stabilité (unité : seconde)
membershipSampleInterval: 1s
# Temps écoulé depuis le dernier message de déclaration avant que le pair décide d'effectuer l'élection de leader (unité : seconde)
leaderAliveThreshold: 10s
# Temps entre l'envoi du message de proposition par le pair et sa déclaration comme leader (envoi du message de déclaration) (unité : seconde)
leaderElectionDuration: 5s
pvtData:
# pullRetryThreshold détermine la durée maximale pendant laquelle les données privées correspondant à un bloc donné
# seront tentées d'être extraites des pairs jusqu'à ce que le bloc soit validé sans les données privées
pullRetryThreshold: 60s
# Lorsque les données privées entrent dans le magasin temporaire, elles sont associées à la hauteur du registre du pair à ce moment-là.
# transientstoreMaxBlockRetention définit la différence maximale entre la hauteur actuelle du registre lors de la validation,
# et les données privées résidant dans le magasin temporaire qui sont garanties de ne pas être purgées.
# Les données privées sont purgées du magasin temporaire lorsque des blocs avec des séquences qui sont des multiples
# de transientstoreMaxBlockRetention sont validés.
transientstoreMaxBlockRetention: 1000
# pushAckTimeout est le temps maximum d'attente pour une reconnaissance de chaque pair
# lors de la poussée des données privées au moment de l'appui.
pushAckTimeout: 3s
# Marge de tirage Block to live, utilisée comme tampon
# pour empêcher le pair d'essayer de tirer les données privées
# des pairs qui seront bientôt purgées dans les N prochains blocs.
# Cela aide un pair nouvellement joint à rattraper plus rapidement
# la hauteur actuelle de la blockchain.
btlPullMargin: 10
# le processus de réconciliation est effectué dans une boucle infinie, tandis que dans chaque itération le réconciliateur essaie de
# tirer des autres pairs les blocs manquants les plus récents avec une limitation de taille de lot maximale.
# reconcileBatchSize détermine la taille de lot maximale des données privées manquantes qui seront réconciliées dans une
# seule itération.
reconcileBatchSize: 10
# reconcileSleepInterval détermine le temps que le réconciliateur dort de la fin d'une itération jusqu'au début
# de la prochaine itération de réconciliation.
reconcileSleepInterval: 1m
# reconciliationEnabled est un indicateur qui indique si la réconciliation des données privées est activée ou non.
reconciliationEnabled: true
# skipPullingInvalidTransactionsDuringCommit est un indicateur qui indique si le tirage des données privées
# des transactions invalides provenant d'autres pairs doit être ignoré pendant le temps de validation et tiré
# uniquement via le réconciliateur.
skipPullingInvalidTransactionsDuringCommit: false
# implicitCollectionDisseminationPolicy spécifie la politique de dissémination pour la collection implicite propre au pair.
# Lorsqu'un pair approuve une proposition qui écrit dans sa propre collection implicite, les valeurs ci-dessous remplacent les valeurs par défaut
# pour la dissémination des données privées.
# Notez que cela s'applique à tous les canaux auxquels le pair a rejoint. L'implication est que requiredPeerCount doit
# être inférieur au nombre de pairs dans un canal qui a le plus petit nombre de pairs de l'organisation.
implicitCollectionDisseminationPolicy:
# requiredPeerCount définit le nombre minimum de pairs éligibles auxquels le pair doit réussir
# à disséminer les données privées pour sa propre collection implicite lors de l'appui. La valeur par défaut est 0.
requiredPeerCount: 0
# maxPeerCount définit le nombre maximum de pairs éligibles auxquels le pair tentera de
# disséminer les données privées pour sa propre collection implicite lors de l'appui. La valeur par défaut est 1.
maxPeerCount: 1
# Configuration liée au transfert d'état de la diffusion
state:
# indique si le transfert d'état est activé ou non
# la valeur par défaut est false, c'est-à-dire que le transfert d'état est actif
# et veille à synchroniser les blocs manquants permettant
# au pair en retard de rattraper la vitesse du reste du réseau.
# Gardez à l'esprit que lorsque peer.gossip.useLeaderElection est vrai
# et qu'il y a plusieurs pairs dans l'organisation,
# ou peer.gossip.useLeaderElection est faux ainsi que
# peer.gossip.orgleader étant faux, le registre du pair peut être en retard
# par rapport aux autres pairs et ne rattrapera jamais le rythme en raison du transfert d'état
# étant désactivé.
enabled: false
# checkInterval intervalle pour vérifier si le pair est suffisamment en retard pour
# demander des blocs via le transfert d'état d'un autre pair.
checkInterval: 10s
# responseTimeout durée d'attente pour la réponse de transfert d'état de
# autres pairs
responseTimeout: 3s
# batchSize le nombre de blocs à demander via le transfert d'état d'un autre pair
batchSize: 10
# blockBufferSize reflète la taille du tampon de réordonnancement
# qui capture les blocs et veille à les livrer dans l'ordre
# vers la couche de registre. La taille réelle du tampon est bornée entre
# 0 et 2*blockBufferSize, chaque canal maintient son propre tampon
blockBufferSize: 20
# maxRetries nombre maximum de nouvelles tentatives pour demander
# une seule requête de transfert d'état
maxRetries: 3
# Paramètres TLS
tls:
# Exiger le TLS côté serveur
enabled: true
# Exiger les certificats clients / TLS mutuel pour les connexions entrantes.
# Notez que les clients qui ne sont pas configurés pour utiliser un certificat
# échoueront à se connecter au pair.
clientAuthRequired: false
# Certificat X.509 utilisé pour le serveur TLS
cert:
file: /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org2.example.com/pairs/peer1.org2.example.com/tls/server.crt
# Clé privée utilisée pour le serveur TLS
key:
file: /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org2.example.com/pairs/peer1.org2.example.com/tls/server.key
# rootcert.file représente la chaîne de certificats racines de confiance utilisée pour vérifier les certificats
# des autres nœuds lors des connexions sortantes.
# Il n'est pas nécessaire de le définir, mais il peut être utilisé pour compléter l'ensemble des certificats TLS CA
# disponibles à partir des MSP de chaque configuration de canal.
rootcert:
file: /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org2.example.com/pairs/peer1.org2.example.com/tls/ca.crt
# Si le TLS mutuel est activé, clientRootCAs.files contient une liste de certificats racines supplémentaires
# utilisés pour vérifier les certificats des connexions clients.
# Il complète l'ensemble des certificats TLS CA disponibles à partir des MSP de chaque configuration de canal.
# Au minimum, définissez le certificat racine TLS CA de votre organisation afin que le pair puisse recevoir les demandes de jonction de canal.
clientRootCAs:
files:
- /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org2.example.com/pairs/peer1.org2.example.com/tls/ca.crt
# Clé privée utilisée pour TLS lors des connexions clientes.
# Si non définie, peer.tls.key.file sera utilisé à la place
clientKey:
file:
# Certificat X.509 utilisé pour TLS lors des connexions clientes.
# Si non défini, peer.tls.cert.file sera utilisé à la place
clientCert:
file:
# Authentication contient les paramètres de configuration liés à l'authentification
# des messages clients
authentication:
# la différence acceptable entre l'heure actuelle du serveur et l'
# heure du client comme spécifiée dans un message de demande client
timewindow: 15m
# Chemin sur le système de fichiers où le pair stockera les données (par exemple registre). Cet
# emplacement doit être protégé par un contrôle d'accès pour empêcher toute modification
# non intentionnelle qui pourrait corrompre les opérations du pair.
fileSystemPath: /var/hyperledger/production/org2-peer1
# BCCSP (fournisseur cryptographique Blockchain) : Sélectionnez quelle implémentation ou
# bibliothèque cryptographique utiliser
BCCSP:
Default: SW
# Paramètres pour le fournisseur cryptographique SW (c'est-à-dire lorsque DEFAULT : SW)
SW:
# TODO : Le hachage et le niveau de sécurité par défaut nécessitent une refactorisation pour être
# entièrement configurable. Changer ces valeurs par défaut nécessite une coordination
# SHA2 est codé en dur à plusieurs endroits, pas seulement dans BCCSP
Hash: SHA2
Security: 256
# Emplacement du magasin de clés
FileKeyStore:
# Si "", la valeur par défaut est 'mspConfigPath'/keystore
KeyStore:
# Paramètres pour le fournisseur cryptographique PKCS#11 (c'est-à-dire lorsque DEFAULT : PKCS11)
PKCS11:
# Emplacement de la bibliothèque de module PKCS11
Library:
# Étiquette du jeton
Label:
# Code PIN utilisateur
Pin:
Hash:
Security:
# Chemin sur le système de fichiers où le pair trouvera les configurations MSP locales
mspConfigPath: /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org2.example.com/pairs/peer1.org2.example.com/msp
# Identificateur du MSP local
# ----!!!!IMPORTANT!!!-!!!IMPORTANT!!!-!!!IMPORTANT!!!!----
# Les déploiements doivent changer la valeur de la chaîne localMspId.
# En particulier, le nom de l'ID MSP local d'un pair doit
# correspondre au nom de l'un des MSPs de chaque canal
# auquel ce pair appartient. Sinon, les messages de ce pair
# ne seront pas identifiés comme valides par les autres nœuds.
localMspId: Org2MSP
# Options de configuration client CLI communes
client:
# délai de connexion
connTimeout: 3s
# Configuration liée au service de livraison
deliveryclient:
# Active ce pair pour diffuser les blocs qu'il a extraits du service d'ordonnancement
# via la diffusion.
# Notez que 'gossip.state.enabled' contrôle la réplication de blocs point à point
# des blocs validés dans le passé.
blockGossipEnabled: true
# Définit le temps total que le service de livraison peut passer dans les tentatives de
# reconnexion jusqu'à ce que sa logique de nouvelle tentative abandonne et renvoie une erreur
reconnectTotalTimeThreshold: 3600s
# Définit le délai de connexion du service de livraison <-> service d'ordonnancement
connTimeout: 3s
# Définit le délai maximal du service de livraison entre les nouvelles tentatives consécutives
reConnectBackoffThreshold: 3600s
# Une liste d'adresses de points de terminaison de service d'ordonnancement qui devraient être remplacées
# lorsqu'elles sont trouvées dans les configurations de canal.
addressOverrides:
# - from:
# to:
# caCertsFile:
# - from:
# to:
# caCertsFile:
# Type pour le MSP local - par défaut c'est de type bccsp
localMspType: bccsp
# Utilisé avec les outils de profilage Go uniquement dans un environnement non de production. Dans
# la production, il devrait être désactivé (par exemple enabled : false)
profile:
enabled: false
listenAddress: 0.0.0.0:6060
# Handlers définit des gestionnaires personnalisés qui peuvent filtrer et modifier
# les objets passant dans le pair, tels que :
# Filtre d'authentification - rejeter ou transmettre les propositions des clients
# Décorateurs - ajouter ou modifier l'entrée chaincode transmise au chaincode
# Appuis - Signature personnalisée sur la charge utile de réponse de proposition et sa modification
# Une définition de gestionnaire valide contient :
# - Un nom qui est un nom de méthode de fabrique défini dans
# core/handlers/library/library.go pour les gestionnaires compilés statiquement
# - chemin de bibliothèque vers le binaire objet partagé pour les filtres branchables
# Les filtres d'authentification et les décorateurs sont chaînés et exécutés dans l'ordre
# où ils sont définis. Par exemple :
# authFilters:
# -
# name: FilterOne
# library: /opt/lib/filter.so
# -
# name: FilterTwo
# decorators:
# -
# name: DecoratorOne
# -
# name: DecoratorTwo
# library: /opt/lib/decorator.so
# Les appuis sont configurés en tant que carte dont les clés sont les chaincodes système d'appui qui sont remplacés.
# Ci-dessous un exemple qui remplace l'ESCC par défaut et utilise un plugin d'appui qui a la même fonctionnalité
# que l'ESCC par défaut.
# Si la propriété 'library' est absente, le nom est utilisé comme méthode de constructeur dans la bibliothèque intégrée similaire
# aux filtres d'authentification et aux décorateurs.
# endorsers:
# escc:
# name: DefaultESCC
# library: /etc/hyperledger/fabric/plugin/escc.so
handlers:
authFilters:
-
name: DefaultAuth
-
name: ExpirationCheck # Ce filtre vérifie l'expiration du certificat x509 d'identité
decorators:
-
name: DefaultDecorator
endorsers:
escc:
name: DefaultEndorsement
library:
validators:
vscc:
name: DefaultValidation
library:
# library: /etc/hyperledger/fabric/plugin/escc.so
# Nombre de goroutines qui exécuteront la validation des transactions en parallèle.
# Par défaut, le pair choisit le nombre de processeurs de la machine. Définissez cette
# variable pour remplacer ce choix.
# NOTE : remplacer cette valeur pourrait négativement influencer les performances du
# pair donc veuillez changer cette valeur uniquement si vous savez ce que vous faites
validatorPoolSize:
# Le service de découverte est utilisé par les clients pour interroger des informations sur les pairs,
# telles que - quels pairs ont rejoint un certain canal, quelle est la dernière
# configuration du canal, et surtout - étant donné un chaincode et un canal,
# quels ensembles possibles de pairs satisfont la politique d'appui.
discovery:
enabled: true
# Si le cache d'authentification est activé ou non.
authCacheEnabled: true
# La taille maximale du cache, après quoi un nettoyage a lieu
authCacheMaxSize: 1000
# La proportion (0 à 1) des entrées qui restent dans le cache après que le cache soit nettoyé en raison d'une surpopulation
authCachePurgeRetentionRatio: 0.75
# Si l'on autorise les non-administrateurs à effectuer des requêtes hors périmètre de canal.
# Lorsque c'est faux, cela signifie que seuls les administrateurs de pair peuvent effectuer des requêtes hors périmètre de canal.
orgMembersAllowedAccess: false
# Limits est utilisé pour configurer certaines limites de ressources internes.
limits:
# Concurrency limite le nombre de requêtes simultanément en cours d'exécution vers un service sur chaque pair.
# Actuellement cette option est appliquée uniquement au service d'appui et au service de livraison.
# Lorsque la propriété est absente ou que la valeur est 0, la limite de concurrence est désactivée pour le service.
concurrency:
# endorserService limite les requêtes simultanées vers le service d'appui qui gère le déploiement, la requête et l'invocation de chaincode,
# y compris les chaincodes utilisateur et les chaincodes système.
endorserService: 2500
# deliverService limite les auditeurs d'événements simultanés enregistrés auprès du service de livraison pour les événements de blocs et de transactions.
deliverService: 2500
# gatewayService limite les requêtes simultanées vers le service de passerelle qui gère la soumission et l'évaluation des transactions.
gatewayService: 500
# Puisque tous les nœuds devraient être cohérents, il est recommandé de conserver
# la valeur par défaut de 100 Mo pour MaxRecvMsgSize & MaxSendMsgSize
# Taille maximale du message en octets que le serveur et le client GRPC peuvent recevoir
maxRecvMsgSize: 104857600
# Taille maximale du message en octets que le serveur et le client GRPC peuvent envoyer
maxSendMsgSize: 104857600
###############################################################################
Section VM
############################################################################### vm:
# Point de terminaison du système de gestion vm. Pour docker peut être l'un des suivants en général
# unix:///var/run/docker.sock
# http://localhost:2375
# https://localhost:2376
# Si vous utilisez des constructeurs de chaincode externes et que vous n'avez pas besoin du constructeur de chaincode Docker par défaut,
# le point de terminaison devrait ne pas être configuré afin que le vérificateur de santé Docker du pair ne soit pas enregistré.
endpoint: unix:///var/run/docker.sock
# paramètres pour les vms docker
docker:
tls:
enabled: false
ca:
file: docker/ca.crt
cert:
file: docker/tls.crt
key:
file: docker/tls.key
# Active/désactive la sortie standard/erreur des conteneurs chaincode pour
# des fins de débogage
attachStdout: false
# Paramètres lors de la création du conteneur docker.
# Le conteneur peut être créé efficacement en utilisant ipam & dns-server pour le cluster
# NetworkMode - définit le mode réseau pour le conteneur. Les
# valeurs standard prises en charge sont : `host`(par défaut),`bridge`,`ipvlan`,`none`.
# Dns - une liste de serveurs DNS pour que le conteneur les utilise.
# Note : Les propriétés `Privileged` `Binds` `Links` et `PortBindings` de
# la configuration hôte Docker ne sont pas prises en charge et ne seront pas utilisées si définies.
# LogConfig - définit le pilote de journalisation (Type) et les options
# (Config) pour Docker. Pour plus d'informations,
# https://docs.docker.com/engine/admin/logging/overview/
# Note : Définir LogConfig en utilisant des variables d'environnement n'est pas pris en charge.
hostConfig:
NetworkMode: host
Dns:
# - 192.168.0.1
LogConfig:
Type: json-file
Config:
max-size: "50m"
max-file: "5"
Memory: 2147483648
###############################################################################
Section Chaincode
############################################################################### chaincode:
# L'id est utilisé par le stub de chaincode pour enregistrer le chaincode en cours d'exécution
# ID avec le pair et est généralement fourni via des variables ENV
# la forme `path` de l'ID est fournie lors de l'installation du chaincode.
# Le `name` est utilisé pour toutes les autres requêtes et peut être n'importe quelle chaîne.
id:
path:
name:
# Environnement de construction générique, adapté à la plupart des types de chaincode
builder: $(DOCKER_NS)/fabric-ccenv:$(TWO_DIGIT_VERSION)
# Active/désactive le téléchargement forcé des images docker de base (répertoriées ci-dessous)
# lors de l'instanciation du chaincode utilisateur.
# Utile lors de l'utilisation de balises d'image mobiles (telles que :latest)
pull: false
golang:
# golang n'aura jamais besoin de plus que baseos
runtime: $(DOCKER_NS)/fabric-baseos:$(TWO_DIGIT_VERSION)
# si oui ou non le chaincode golang doit être lié dynamiquement
dynamicLink: false
java:
# C'est une image basée sur java:openjdk-8 avec des outils de compilation
# supplémentaires ajoutés pour l'emballage de la couche shim java.
# Cette image est emballée avec les bibliothèques de couche shim nécessaires
# pour l'exécution du chaincode Java.
runtime: $(DOCKER_NS)/fabric-javaenv:$(TWO_DIGIT_VERSION)
node:
# C'est une image basée sur node:$(NODE_VER)-alpine
runtime: $(DOCKER_NS)/fabric-nodeenv:$(TWO_DIGIT_VERSION)
# Liste des répertoires à traiter comme des constructeurs et lanceurs externes pour
# chaincode. Le traitement de détection de constructeur externe itérera sur les
# constructeurs dans l'ordre spécifié ci-dessous.
# Si vous n'avez pas besoin de revenir au constructeur Docker par défaut, désactivez également vm.endpoint ci-dessus.
# Pour remplacer cette propriété via une variable d'environnement, utilisez CORE_CHAINCODE_EXTERNALBUILDERS: [{name: x, path: dir1}, {name: y, path: dir2}]
externalBuilders:
- name: ccaas_builder
path: /opt/hyperledger/ccaas_builder
propagateEnvironment:
- CHAINCODE_AS_A_SERVICE_BUILDER_CONFIG
# La durée maximale d'attente pour que le processus de construction et d'installation du chaincode
# soit terminé.
installTimeout: 300s
# Durée d'attente pour le démarrage d'un conteneur et l'attente de Register
# à traverser.
startuptimeout: 300s
# Durée d'attente pour les appels Invoke et Init pour éviter les problèmes.
# Ce délai d'attente est utilisé par tous les chaincodes dans tous les canaux, y compris
# les chaincodes système.
# Notez que pendant Invoke, si l'image n'est pas disponible (par exemple en train d'être
# nettoyée dans un environnement de développement), le pair construira automatiquement
# l'image, ce qui pourrait prendre plus de temps. Dans un environnement de production,
# l'image du chaincode est peu susceptible d'être supprimée, donc le délai d'attente pourrait être
# réduit en conséquence.
executetimeout: 30s
# Il y a 2 modes : "dev" et "net".
# En mode dev, l'utilisateur exécute le chaincode après avoir démarré le pair à partir de
# ligne de commande sur la machine locale.
# En mode net, le pair exécutera le chaincode dans un conteneur docker.
mode: net
# maintien de connexion en secondes. Dans les situations où la communication passe par un
# proxy qui ne prend pas en charge le maintien de connexion, ce paramètre maintiendra la connexion
# entre le pair et le chaincode.
# Une valeur <= 0 désactive le maintien de connexion
keepalive: 0
# chaincodes système activés
system:
_lifecycle: enable
cscc: enable
lscc: enable
qscc: enable
# Section de journalisation pour le conteneur chaincode
logging:
# Niveau par défaut pour tous les journaux dans le conteneur chaincode
level: info
# Remplacer le niveau par défaut pour le journal 'shim'
shim: warning
# Format pour les journaux du conteneur chaincode
format: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'
###############################################################################
Section Registre - la configuration du registre englobe à la fois la blockchain
et l'état
############################################################################### ledger:
blockchain:
state: # stateDatabase - les options sont "goleveldb", "CouchDB" # goleveldb - base de données d'état par défaut stockée dans goleveldb. # CouchDB - stocker la base de données d'état dans CouchDB stateDatabase: goleveldb # Limite sur le nombre d'enregistrements à retourner par requête totalQueryLimit: 100000 couchDBConfig: # Il est recommandé d'exécuter CouchDB sur le même serveur que le pair, et # de ne pas mapper le port conteneur CouchDB vers un port serveur dans docker-compose. # Sinon une sécurité appropriée doit être fournie sur la connexion entre # le client CouchDB (sur le pair) et le serveur. couchDBAddress: 127.0.0.1:5984 # Cet utilisateur doit avoir les autorités de lecture et d'écriture sur CouchDB username: # Le mot de passe est recommandé d'être transmis comme variable d'environnement # lors du démarrage (par exemple CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD). # S'il est stocké ici, le fichier doit être protégé par un contrôle d'accès # pour empêcher des utilisateurs non intentionnels de découvrir le mot de passe. password: # Nombre de nouvelles tentatives pour les erreurs CouchDB maxRetries: 3 # Nombre de nouvelles tentatives pour les erreurs CouchDB pendant le démarrage du pair. # Le délai entre les tentatives double à chaque tentative. # La valeur par défaut de 10 tentatives donne 11 tentatives sur 2 minutes. maxRetriesOnStartup: 10 # Délai de requête CouchDB (unité : durée, par exemple 20s) requestTimeout: 35s # Limite sur le nombre d'enregistrements par chaque requête CouchDB # Notez que les requêtes chaincode sont uniquement limitées par totalQueryLimit. # En interne le chaincode peut exécuter plusieurs requêtes CouchDB, # chacune de taille internalQueryLimit. internalQueryLimit: 1000 # Limite sur le nombre d'enregistrements par lot de mise à jour CouchDB maxBatchUpdateSize: 1000 # Créer la base de données système _global_changes # C'est facultatif. Créer la base de données de changements globaux nécessitera # des ressources système supplémentaires pour suivre les changements et maintenir la base de données createGlobalChangesDB: false # CacheSize indique le nombre maximum de mégaoctets (Mo) à allouer pour le cache d'état # en mémoire. Notez que CacheSize doit être un multiple de 32 Mo. S'il n'est pas un multiple # de 32 Mo, le pair arrondira la taille au multiple de 32 Mo suivant. # Pour désactiver le cache, 0 Mo doivent être affectés à cacheSize. cacheSize: 64
history: # enableHistoryDatabase - les options sont true ou false # Indique si l'historique des mises à jour de clés doit être stocké. # Tous les index d'historique seront stockés dans goleveldb, quelle que soit l'utilisation # de CouchDB ou d'une base de données alternative pour l'état. enableHistoryDatabase: true
pvtdataStore: # la taille maximale du lot de base de données pour convertir # les entrées de données manquantes non éligibles en entrées de données manquantes éligibles collElgProcMaxDbBatchSize: 5000 # la durée minimale (en millisecondes) entre l'écriture # de deux lots de base de données consécutifs pour convertir les entrées de données manquantes non éligibles en entrées de données manquantes éligibles collElgProcDbBatchesInterval: 1000 # Les entrées de données manquantes sont classées en deux catégories : # (1) priorisées # (2) dépriorisées # Initialement, toutes les données manquantes sont dans la liste priorisée. Quand le # réconciliateur est incapable de récupérer les données manquantes auprès d'autres pairs, # les données manquantes non réconciliées seraient déplacées vers la liste dépriorisée. # Le réconciliateur réessaiera les données manquantes dépriorisées après chaque # deprioritizedDataReconcilerInterval (unité : minutes). Notez que l' # intervalle doit être supérieur à reconcileSleepInterval deprioritizedDataReconcilerInterval: 60m
snapshots: # Chemin sur le système de fichiers où le pair stockera les instantanés du registre rootDir: /var/hyperledger/production/snapshots/org2-peer1
###############################################################################
Section Opérations
############################################################################### operations: # hôte et port pour le serveur d'opérations listenAddress: 127.0.0.1:9449
# Configuration TLS pour le point de terminaison des opérations
tls:
# TLS activé
enabled: false
# chemin vers le certificat de serveur PEM encodé pour le serveur d'opérations
cert:
file:
# chemin vers la clé de serveur PEM encodée pour le serveur d'opérations
key:
file:
# la plupart des points de terminaison de service d'opérations exigent l'authentification client lorsque TLS
# est activé. clientAuthRequired exige l'authentification par certificat client
# au niveau TLS pour accéder à toutes les ressources.
clientAuthRequired: false
# chemins vers les certificats CA PEM encodés à faire confiance pour l'authentification client
clientRootCAs:
files: []
###############################################################################
Section Métriques
############################################################################### metrics: # le fournisseur de métriques est l'un de statsd, prometheus, ou désactivé provider: disabled
# configuration statsd
statsd:
# type de réseau : tcp ou udp
network: udp
# adresse du serveur statsd
address: 127.0.0.1:8128
# l'intervalle auquel les compteurs et jauges mis en cache localement sont poussés
# vers statsd ; les temporisations sont poussées immédiatement
writeInterval: 10s
# le préfixe est ajouté à toutes les métriques statsd émises
prefix:
Démarrer le nœud org2-peer1 : ```
nohup ./peer node start > org2-peer1.log 2>&1 &
Création du canal
export CORE_PEER_LOCALMSPID=Org1MSP
export CORE_PEER_MSPCONFIGPATH=/usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
./peer channel create -o orderer0.example.com:7050 -c businesschannel -f "/usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/channel-artifacts/businesschannel.tx" --timeout "30s" --tls --cafile /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
Après une création réussie, un fichier businesschannel.block sera généré dans le répertoire courant. ```
mv businesschannel.block /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/channel-artifacts
### Rejoindre le canal
org1-peer0 rejoint le canal : ```
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org1.example.com/pairs/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051
./peer channel join -b /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/channel-artifacts/businesschannel.block
Après un succès de jonction, vous pouvez voir la sortie suivante : ``` 2022-02-22 08:58:09.295 EST 0002 INFO [channelCmd] executeJoin -> Successfully submitted proposal to join channel
org1-peer1 rejoint le canal : ```
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org1.example.com/pairs/peer1.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=peer1.org1.example.com:8051
./peer channel join -b /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/channel-artifacts/businesschannel.block
org2-peer0 rejoint le canal : ``` export CORE_PEER_TLS_ENABLED=true export CORE_PEER_LOCALMSPID="Org2MSP" export CORE_PEER_TLS_ROOTCERT_FILE=/usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org2.example.com/pairs/peer0.org2.example.com/tls/ca.crt export CORE_PEER_MSPCONFIGPATH=/usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp export CORE_PEER_ADDRESS=peer0.org2.example.com:9051
./peer channel join -b /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/channel-artifacts/businesschannel.block
org2-peer1 rejoint le canal : ```
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org2.example.com/pairs/peer1.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=peer1.org2.example.com:10051
./peer channel join -b /usr/project/fabric/3orderer-org1-2peer-org2-2peer-network/channel-artifacts/businesschannel.block
Voir les canaux auxquels les pairs ont rejoint : ``` ./peer channel list
Sortie suviante : ```
2022-02-22 09:03:02.681 EST 0001 INFO [channelCmd] InitCmdFactory -> Endorser and orderer connections initialized
Channels peers has joined:
businesschannel