a
a
Weather:
city not found
HomeBitcoinRéseaux privés | Aller à Ethereum

Réseaux privés | Aller à Ethereum

Ce guide explique comment configurer un réseau privé de plusieurs nœuds geth. Un réseau Ethereum est un réseau privé si les nœuds ne sont pas connectés au réseau principal. Dans ce contexte, privé signifie uniquement privé ou isolé, plutôt que protégé ou sécurisé.

Choisissez un identifiant de réseau

L’ID de réseau est un entier qui isole les réseaux peer-to-peer d’Ethereum. Les connexions entre les nœuds de la blockchain ne se produiront que si les deux pairs utilisent le même bloc de genèse et le même ID de réseau. Utilisez le --networkid option de ligne de commande pour définir l’ID réseau utilisé par geth.

Le réseau principal a l’ID 1. Si vous fournissez votre propre ID de réseau personnalisé qui est différent du réseau principal, vos nœuds ne se connecteront pas à d’autres nœuds et ne formeront pas un réseau privé. Si vous envisagez de vous connecter à votre chaîne privée sur Internet, il est préférable de choisir un identifiant réseau qui n’est pas déjà utilisé. Vous pouvez trouver un registre géré par la communauté des réseaux Ethereum sur https://chainid.network.

Choisissez un algorithme de consentement

Alors que le réseau central utilise la preuve de travail pour sécuriser la blockchain, Geth prend également en charge l’algorithme de consensus de preuve d’autorité « clique » comme alternative aux réseaux privés. Nous recommandons fortement «clique» pour les nouveaux déploiements de réseaux privés car il nécessite beaucoup moins de ressources que la preuve de travail. Le système de clique est également utilisé pour plusieurs réseaux de test publics Ethereum tels que Rinkeby et Görli.

Voici les principales différences entre les deux algorithmes de consensus disponibles dans Geth:

Le consensus Ethash, étant un algorithme de preuve de travail, est un système qui permet la participation ouverte de toute personne souhaitant consacrer des ressources à l’exploitation minière. Bien que ce soit une excellente propriété pour un réseau public, la sécurité globale de la blockchain dépend fortement de la quantité totale de ressources utilisées pour la protéger. En tant que tel, la preuve de travail est un mauvais choix pour les réseaux privés avec peu de mineurs. La « difficulté » d’extraction d’Ethash est automatiquement ajustée pour que de nouveaux blocs soient créés à environ 12 secondes d’intervalle. Au fur et à mesure que davantage de ressources minières sont distribuées sur le réseau, la création d’un nouveau bloc devient plus difficile afin que le temps de bloc moyen corresponde au temps de bloc cible.

Clique Consent est un système de preuve d’autorité dans lequel de nouveaux blocs ne peuvent être créés que par des «signataires» autorisés. Le protocole de consensus de clique est spécifié dans EIP-225. L’ensemble initial de signataires autorisés est configuré dans le bloc genesis. Les signataires peuvent être autorisés et révoqués à l’aide d’un mécanisme de vote, permettant ainsi à l’ensemble des signataires de changer à mesure que la blockchain fonctionne. Clique peut être configuré pour cibler n’importe quel temps de blocage (dans des limites raisonnables) car il n’est pas lié à la difficulté.

Création du bloc Genesis

Chaque blockchain commence par le bloc genesis. Lorsque vous exécutez Geth avec les paramètres par défaut pour la première fois, il enregistre la genèse du réseau principal dans la base de données. Pour un réseau privé, vous souhaitez généralement un bloc de genèse différent.

Le bloc de genèse est configuré à l’aide du genesis.json fichier. Lorsque vous créez un bloc de genèse, vous devez décider de certains paramètres initiaux pour votre blockchain:

  • Fonctionnalités de la plateforme Ethereum activées pour le lancement (config). L’activation des fonctionnalités du protocole pendant l’exécution de la blockchain nécessite la planification d’un hard fork.
  • Limite de gaz de blocage initiale (gasLimit). Votre choix ici affecte la quantité de calcul EVM qui peut avoir lieu dans un seul bloc. Il est recommandé d’utiliser le réseau central Ethereum comme guide pour trouver une bonne quantité. La limite de gaz de blocage peut être ajustée après le lancement à l’aide du --targetgaslimit indicateur de ligne de commande.
  • Allocation initiale d’éther (alloc). Cela détermine la quantité d’éther disponible pour les adresses que vous répertoriez dans le bloc de genèse. Il est possible de créer de l’éther supplémentaire par extraction au fur et à mesure que la chaîne progresse.

Cliquez sur Exemple

Voici un exemple de fichier genesis.json pour un test de réseau d’autorité. le config
garantit que toutes les modifications connues du protocole sont disponibles et configure le moteur « clique » à utiliser pour le consentement.

Notez que l’ensemble initial de signataires doit être configuré via extradata champ. Ce champ est obligatoire pour que la clique fonctionne.

Créez d’abord les clés de compte de signataire à l’aide de la commande geth account (exécutez cette commande plusieurs fois pour créer plusieurs clés de signataire).

geth account new --datadir data

Notez l’adresse Ethereum imprimée par cette commande.

Pour créer les premiers extradés pour votre réseau, collectez les adresses des signataires et cryptez-les
extradata comme la concaténation de 32 octets zéro, toutes les adresses de signataire et 65 autres octets zéro. Dans l’exemple suivant, extradata contient une seule adresse du signataire initial,
0x7df9a875a174b3bc565e6424a0050ebc1b2d1d82.

Vous pouvez utiliser le fichier period option de configuration pour définir le temps de verrouillage cible de la chaîne.

{
  "config": {
    "chainId": 15,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "clique": {
      "period": 5,
      "epoch": 30000
    }
  },
  "difficulty": "1",
  "gasLimit": "8000000",
  "extradata": "0x00000000000000000000000000000000000000000000000000000000000000007df9a875a174b3bc565e6424a0050ebc1b2d1d820000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  "alloc": {
    "7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
    "f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
  }
}

Exemple Ethash

Ethash étant l’algorithme de consentement par défaut, il n’est pas nécessaire de configurer des paramètres supplémentaires pour l’utiliser. Vous pouvez influencer la difficulté minière initiale en utilisant le
difficulty paramètre, mais notez que l’algorithme de réglage de la difficulté s’adaptera rapidement à la quantité de ressources minérales que vous distribuerez sur la chaîne.

{
  "config": {
    "chainId": 15,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "ethash": {}
  },
  "difficulty": "1",
  "gasLimit": "8000000",
  "alloc": {
    "7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
    "f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
  }
}

Initialisation de la base de données Geth

Pour créer un nœud blockchain qui utilise ce bloc genesis, exécutez la commande suivante. Cela importe et définit le bloc de genèse canonique de votre chaîne.

geth init --datadir data genesis.json

Les futures exécutions geth qui utilisent ce répertoire de données utiliseront le bloc de genèse que vous avez défini.

geth --datadir data --networkid 15

Planification de la fourche dure

Au fur et à mesure que le développement du protocole Ethereum progresse, de nouvelles fonctionnalités Ethereum deviennent disponibles. Pour activer ces fonctionnalités sur votre réseau privé, vous devez prévoir un hard fork.

Tout d’abord, choisissez les futurs numéros de bloc où le hard fork se déclenchera. Continuant de l’exemple genesis.json ci-dessus, supposons que votre réseau fonctionne et que son numéro de bloc actuel est 35421. Pour programmer le fork «Istanbul», nous choisissons le bloc 40000 comme numéro de bloc d’activation et éditons notre fichier genesis.json pour le définir:

{
  "config": {
    ...
    "istanbulBlock": 40000,
    ...
  },
  ...
}

Pour mettre à niveau vers le nouveau fork, assurez-vous d’abord que toutes les instances Geth de votre réseau privé prennent en charge le fork d’Istanbul (c’est-à-dire assurez-vous que la dernière version de Geth est installée). Fermez maintenant tous les nœuds et réexécutez le fichier init commande pour activer la nouvelle configuration de chaîne:

geth init --datadir data genesis.json

Configuration du réseau

Une fois que votre nœud a été initialisé à l’état de genèse souhaité, il est temps de configurer le réseau peer-to-peer. N’importe quel nœud peut être utilisé comme point d’entrée. Il est recommandé de dédier un seul nœud comme point de rencontre que tous les autres nœuds utilisent pour se joindre. Ce nœud est appelé le « nœud d’amorçage ».

Tout d’abord, il détermine l’adresse IP de la machine sur laquelle le nœud d’amorçage sera exécuté. Si vous utilisez un service cloud tel qu’Amazon EC2, vous trouverez l’adresse IP de la machine virtuelle dans la console de gestion. Assurez-vous également que la configuration de votre pare-feu autorise le trafic UDP et TCP sur le port 30303.

Le nœud d’amorçage doit connaître sa propre adresse IP afin de la transmettre à d’autres. L’adresse IP est définie à l’aide du --nat flag (entrez votre adresse IP au lieu de l’exemple d’adresse ci-dessous).

geth --datadir data --networkid 15 --nat extip:172.16.254.4

Extrayez maintenant le ‘enregistrement de nœud’ du nœud de démarrage à l’aide de la console JS.

geth attach data/geth.ipc --exec admin.nodeInfo.enr

Cette commande doit imprimer une chaîne base64 comme dans l’exemple suivant. Les autres nœuds utiliseront les informations contenues dans l’enregistrement de nœud d’amorçage pour se connecter à votre réseau peer-to-peer.

"enr:-Je4QEiMeOxy_h0aweL2DtZmxnUMy-XPQcZllrMt_2V1lzynOwSx7GnjCf1k8BAsZD5dvHOBLuldzLYxpoD5UcqISiwDg2V0aMfGhGlQhqmAgmlkgnY0gmlwhKwQ_gSJc2VjcDI1NmsxoQKX_WLWgDKONsGvxtp9OeSIv2fRoGwu5vMtxfNGdut4cIN0Y3CCdl-DdWRwgnZf"

La configuration du réseau peer-to-peer dépend de vos besoins. Si vous connectez des nœuds via Internet, assurez-vous que votre nœud de démarrage et tous les autres nœuds ont des adresses IP publiques attribuées et que le trafic TCP et UDP peut passer le pare-feu.

Si la connectivité Internet n’est pas requise ou si tous les nœuds membres se connectent à l’aide d’adresses IP connues, nous vous recommandons vivement de configurer Geth pour limiter la connectivité d’égal à égal à un sous-réseau IP. Cela isolera davantage votre réseau et empêchera les connexions croisées avec d’autres réseaux blockchain au cas où vos nœuds seraient accessibles à partir d’Internet. Utilisez le
--netrestrict drapeau pour configurer une liste blanche de réseaux IP:

geth <other-flags> --netrestrict 172.16.254.0/24

Avec le paramètre ci-dessus, Geth autorisera uniquement les connexions du sous-réseau 172.16.254.0/24 et n’essaiera pas de se connecter à d’autres nœuds en dehors de la plage IP définie.

Nœuds membres en cours d’exécution

Avant d’exécuter un nœud membre, il doit être initialisé avec le même fichier de genèse que celui utilisé pour le nœud d’amorçage.

Avec bootnode opérationnel et accessible de l’extérieur (vous pouvez essayer telnet <ip> <port>
pour vous assurer qu’il est réellement accessible), vous pouvez démarrer plusieurs nœuds Geth et les connecter via le nœud bootstrap en utilisant le --bootnodes drapeau.

Pour créer un nœud membre s’exécutant sur la même machine que le nœud d’amorçage, choisissez un répertoire de données distinct (exemple: data-2) et port d’écoute (exemple: 30305):

geth --datadir data-2 --networkid 15 --port 30305 --bootnodes <bootstrap-node-record>

Avec le nœud membre en cours d’exécution, vous pouvez vérifier s’il est connecté au nœud d’amorçage ou à tout autre nœud de votre réseau en connectant une console et en exécutant admin.peers. La connexion des nœuds peut prendre quelques secondes.

geth attach data-2/geth.ipc --exec admin.peers

Clique: Courir un signataire

Pour que Geth signe des blocs en mode Preuve d’autorité, un compte de signataire doit être disponible. Le compte doit être déverrouillé pour saper les blocages. La commande suivante vous demandera le mot de passe du compte, puis commencera à signer les blocs:

geth <other-flags> --unlock 0x7df9a875a174b3bc565e6424a0050ebc1b2d1d82 --mine

Vous pouvez configurer davantage l’extraction en modifiant les blocs de limite de gaz par défaut vers lesquels convergent (avec --targetgaslimit) et les transactions de prix sont acceptées à (avec --gasprice).

Ethash: courir un mineur

Pour la preuve de travail dans un simple réseau privé, une seule instance de CPU miner est suffisante pour créer un flux stable de blocs à intervalles réguliers. Pour démarrer une instance Geth pour l’extraction, exécutez-la avec tous les indicateurs normaux et ajoutez ce qui suit pour configurer l’extraction:

geth <other-flags> --mine --minerthreads=1 --etherbase=0x0000000000000000000000000000000000000000

Cela lancera l’extraction de blocs et de transactions sur un seul thread CPU, en créditant toutes les récompenses de bloc au compte spécifié par --etherbase.

https://geth.ethereum.org/docs/interface/private-network

No comments

leave a comment