paint-brush
Cómo configurar una Blockchain privada de Ethereum (Prueba de autoridad) con Go Ethereum - Parte 1por@kryptonight
18,509 lecturas
18,509 lecturas

Cómo configurar una Blockchain privada de Ethereum (Prueba de autoridad) con Go Ethereum - Parte 1

por Ohtani2022/01/02
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

Este artículo explicará cómo configurar una cadena de bloques privada de Ethereum utilizando Go Ethereum (Geth), la implementación oficial de Go del protocolo Ethereum.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail

Coin Mentioned

Mention Thumbnail
featured image - Cómo configurar una Blockchain privada de Ethereum (Prueba de autoridad) con Go Ethereum - Parte 1
Ohtani HackerNoon profile picture



Introducción

Este artículo repasará los pasos necesarios para configurar una Blockchain privada de Ethereum usando Go Ethereum (Geth), la implementación oficial de Go del protocolo Ethereum. Esto es útil cuando los desarrolladores no quieren depender de redes de prueba públicas como Rinkeby, Ropsten, Goerli.


La cadena de bloques privada se implementará en el servidor Ubuntu en la nube (AWS). También nos integraremos con Metamask mediante la creación de una URL RPC personalizada y veremos algunos RPC JSON web3 importantes. La integración de Metamask y los RPC se tratarán en la Parte 2 de este artículo.


Este artículo contiene lo siguiente:

  • Set up the Cloud Ubuntu Server
  • Connect to your Linux instance from Windows using PuTTY
  • Install Geth (Go Ethereum)
  • Create Validator Accounts
  • Create a Genesis File
  • Initialize and Start the Nodes

Sistema operativo y software

  • Sistema operativo: Ubutu 20.04
  • Software: Geth Versión: 1.10.14-estable

Configurar el servidor Ubuntu en la nube

Haga clic en Iniciar una máquina virtual .

Seleccione la siguiente versión del servidor Ubuntu - 20.04

Elija la instancia elegible del nivel Gratis .

No es necesario configurar nada aquí.

Agregue 16 GiB.

No es necesario configurar nada aquí.

Configure el grupo de seguridad (TCP/UDP) de la siguiente manera. Esto es muy importante, ya que debemos asegurarnos de abrir puertos específicos para la red blockchain privada.

Cree un nuevo par de claves de la siguiente manera, luego descargue el par de claves .

Conéctese a su instancia de Linux desde Windows usando PuTTY

Nota : este artículo asume que está ingresando al servidor desde un sistema operativo Windows.

Consulte el enlace de AWS Amazon para configurar esto. Debe instalar PuTTy antes de continuar con este paso.

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html

Instalar Geth (Ir a Ethereum)

SSH en el servidor a través de la sesión PuTTY. Escribe los siguientes comandos. Para obtener más información, consulte: https://geth.ethereum.org/downloads/

 $ sudo add-apt-repository -y ppa:ethereum/ethereum $ sudo apt-get update $ sudo apt-get install ethereum

Crear Cuentas de Validador

Configuraremos dos nodos: el nodo 1 y el nodo 2 para la cadena de bloques privada. Por lo tanto, necesitamos crear dos cuentas de validación (dos direcciones públicas). Los llamados “Validadores”, también conocidos como Selladores en PoA (Prueba de Autoridad), estarán confirmando las transacciones y agregando nuevos bloques.


SSH en el servidor a través de la sesión PuTTY. Escribe los siguientes comandos.

 $ mkdir blockchain_nodes $ cd blockchain_nodes blockchain_nodes$ mkdir node1 node2


Cree cuentas de validación de la siguiente manera. Asegúrese de guardar la dirección pública generada para el nodo1 y el nodo2.

 blockchain_nodes$ geth --datadir node1/ account new ... Your new key was generated Public address of the key: 0x9F1C28A2C8D07d928968C3Dd7201d672D04D4DfD Path of the secret key file: node1/keystore/UTC--2022-01-01T05-35-37.744385813Z--9f1c28a2c8d07d928968c3dd7201d672d04d4dfd ... blockchain_nodes$ geth --datadir node2/ account new ... Your new key was generated Public address of the key: 0x7Bb542DEd40d0E6Bd01a1bAe39ec5E9984f36E48 Path of the secret key file: node2/keystore/UTC--2022-01-01T05-42-30.682329725Z--7bb542ded40d0e6bd01a1bae39ec5e9984f36e48


Guarde la dirección pública generada en el archivo accounts.txt.

 blockchain_nodes$ echo '0x9F1C28A2C8D07d928968C3Dd7201d672D04D4DfD' >> accounts.txt blockchain_nodes$ echo '0x7Bb542DEd40d0E6Bd01a1bAe39ec5E9984f36E48' >> accounts.txt


Guarde las contraseñas que ingresó al crear las cuentas de validación.

 blockchain_nodes$ echo 'node1Password' > node1/password.txt blockchain_nodes$ echo 'node2Password' > node2/password.txt

Crear un archivo Génesis

El Archivo Génesis contiene todos los datos necesarios para crear el bloque génesis (bloque 0), es decir, el primer bloque de la cadena de bloques. El archivo JSON contiene información como con cuántos Ether comienza, etc., el estado inicial de la cadena de bloques.


Ejecutar marionetas.

 blockchain_nodes$ puppeth


Especifique el ID de red/ID de cadena. Debe guardar esto ya que se utilizará en el futuro.

 Please specify a network name to administer (no spaces, hyphens or capital letters please) > 4649


Configurar nueva génesis.

 What would you like to do? (default = stats) 1. Show network stats 2. Configure new genesis 3. Track new remote server 4. Deploy network components > 2


Crear una nueva génesis.

 What would you like to do? (default = create) 1. Create new genesis from scratch 2. Import already existing genesis > 1


Seleccione prueba de autoridad.

 Which consensus engine to use? (default = clique) 1. Ethash - proof-of-work 2. Clique - proof-of-authority > 2


Utilice el valor predeterminado.

 How many seconds should blocks take? (default = 15) > 15


Ingrese la dirección pública de los dos nodos.

 Which accounts are allowed to seal? (mandatory at least one) > 0x9F1C28A2C8D07d928968C3Dd7201d672D04D4DfD > 0x7Bb542DEd40d0E6Bd01a1bAe39ec5E9984f36E48 > 0x


Vuelva a hacer lo mismo: qué cuentas requieren fondos previos.

 Which accounts should be pre-funded? (advisable at least one) > 0x9F1C28A2C8D07d928968C3Dd7201d672D04D4DfD > 0x7Bb542DEd40d0E6Bd01a1bAe39ec5E9984f36E48 > 0x


Seleccione Sí.

 Should the precompile-addresses (0x1 .. 0xff) be pre-funded with 1 wei? (advisable yes) > yes


Especifique su ChainID/NetworkID que seleccionó anteriormente.

 Specify your chain/network ID if you want an explicit one (default = random) > 4649 INFO [01-01|06:41:01.046] Configured new genesis block


Seleccione Administrar génesis existente .

 What would you like to do? (default = stats) 1. Show network stats 2. Manage existing genesis 3. Track new remote server 4. Deploy network components > 2


Exportar configuraciones de génesis.

 1. Modify existing configurations 2. Export genesis configurations 3. Remove genesis configuration > 2


No escribas nada, presiona Enter.

Los errores indican que 4649-aleth.json y 4649-parity.json no se crearán, lo cual es correcto.

 Which folder to save the genesis specs into? (default = current) Will create 4649.json, 4649-aleth.json, 4649-harmony.json, 4649-parity.json > INFO [01-01|06:41:12.642] Saved native genesis chain spec path=4649.json ERROR[01-01|06:41:12.643] Failed to create Aleth chain spec err="unsupported consensus engine" ERROR[01-01|06:41:12.643] Failed to create Parity chain spec err="unsupported consensus engine" INFO [01-01|06:41:12.644] Saved genesis chain spec client=harmony path=4649-harmony.json


Presiona Ctrl + C (o Ctrl + D) para salir de la marioneta.

 What would you like to do? (default = stats) 1. Show network stats 2. Manage existing genesis 3. Track new remote server 4. Deploy network components > ^C


Elimine el archivo XXXX-harmony.json.

 blockchain_nodes$ rm 4649-harmony.json


Cambie el nombre del archivo JSON de génesis de la siguiente manera.

 blockchain_nodes$ mv 4649.json genesis.json

Inicializar e iniciar los nodos

Inicialice y cree los nodos con el archivo gensis JSON creado anteriormente.

 blockchain_nodes$ geth --datadir node1/ init genesis.json blockchain_nodes$ geth --datadir node2/ init genesis.json


Crear guiones bash. Estos scripts bash se utilizan para iniciar el servicio geth en el servidor Ubuntu.

 blockchain_nodes$ touch node1/node1.sh blockchain_nodes$ touch node2/node1.sh


Use el editor de texto vim para abrir los scripts de bach creados.

 blockchain_nodes$ vim node1/node1.sh


Copie y pegue lo siguiente y guarde el script bash. Asegúrese de tener los valores correctos para los siguientes parámetros:

  • Puerto
  • Identificación de red
  • http.dirección
  • http.puerto
  • desbloquear

Para obtener más información sobre las opciones de línea de comandos de geth, consulte: https://geth.ethereum.org/docs/interface/command-line-options

 # Node 1 nohup geth --nousb \ --datadir=$pwd \ --syncmode 'full' \ --port 30310 \ --networkid 4649 \ --miner.gasprice 0 \ --miner.gastarget 470000000000 \ --http \ --http.addr 172.31.15.81 \ --http.corsdomain '*' \ --http.port 8545 \ --http.vhosts '*' \ --http.api admin,eth,miner,net,txpool,personal,web3 \ --mine \ --allow-insecure-unlock \ --unlock "0x9F1C28A2C8D07d928968C3Dd7201d672D04D4DfD" \ --password password.txt & echo "Node 1 Start"


Use el editor de texto vim para abrir los segundos scripts bash creados.

 blockchain_nodes$ vim node2/node2.sh


Copie y pegue lo siguiente y guarde el script bash. Asegúrese de modificar la dirección de desbloqueo a la que generó anteriormente.

 # Node 2 nohup geth --nousb \ --datadir=$pwd \ --syncmode 'full' \ --port 30311 \ --networkid 4649 \ --miner.gasprice 0 \ --miner.gastarget 470000000000 \ --http \ --http.addr 172.31.15.81 \ --http.corsdomain '*' \ --http.port 8546 \ --http.vhosts '*' \ --http.api admin,eth,miner,net,txpool,personal,web3 \ --mine \ --allow-insecure-unlock \ --unlock "0x7Bb542DEd40d0E6Bd01a1bAe39ec5E9984f36E48" \ --password password.txt & echo "Node 2 start"


Cambie el directorio a node1 y ejecute el script bash - node1.sh.

 blockchain_nodes$ cd node1 blockchain_nodes/node1$ sh node1.sh


Ahora, grep para la dirección del enodo. Guarde la dirección del enodo.

 blockchain_nodes/node1$ grep "self=enode:" nohup.out INFO [01-01|08:47:06.591] Started P2P networking self=enode://915fb194d8fdda7c96505c7100b5352c7fcfb7ad674b65b848da7089460b038abce961cfb83c5251e92ea10c7a970cf48b06f2a3f1d8f2e19c45c9082d1a9770@127.0.0.1:30310


Cambie el directorio a node2 y ejecute el script bash - node2.sh.

 blockchain_nodes$ cd node2 blockchain_nodes/node2$ sh node2.sh


Ahora, grep para la dirección del enodo, esta vez para el nodo2. Guarde la dirección del enodo.

 blockchain_nodes/node2$ grep "self=enode:" nohup.out INFO [01-01|09:06:56.048] Started P2P networking self=enode://52c0bccf83affa7c1a25d3d87b3ffbb968c079b22c40b08082531fccdebea1166f6447ba3a953a3c780109942b2744ccf1afce3090e4e25d4f13e3376117acca@127.0.0.1:30311


Usaremos nodos estáticos para conectarnos a nuestra red privada.

Cree el archivo JSON para que los nodos siempre sepan a qué pares conectarse. Usaremos los enodos identificados anteriormente para conectar los dos nodos.


Primero crearemos esto para el nodo 1.

 blockchain_nodes$ touch node1/static-nodes.json


Abre el editor de texto vim.

 blockchain_nodes$ vim node1/static-nodes.json


Pegue lo siguiente: estas son las direcciones de enodo obtenidas anteriormente.

 [ "enode://915fb194d8fdda7c96505c7100b5352c7fcfb7ad674b65b848da7089460b038abce961cfb83c5251e92ea10c7a970cf48b06f2a3f1d8f2e19c45c9082d1a9770@127.0.0.1:30310", "enode://52c0bccf83affa7c1a25d3d87b3ffbb968c079b22c40b08082531fccdebea1166f6447ba3a953a3c780109942b2744ccf1afce3090e4e25d4f13e3376117acca@127.0.0.1:30311" ]


Copie el archivo static-nodes.json en la carpeta node2.

 blockchain_nodes$ cp node1/static-nodes.json node2/


Reinicie Ubuntu Server, luego vuelva a ejecutar los scripts: node1.sh y node2.sh

 blockchain_nodes$ sudo reboot now blockchain_nodes/node1$ sh node1.sh blockchain_nodes/node2$ sh node2.sh


Ejecute el siguiente comando para acceder al nodo geth.

 blockchain_nodes/node1$ geth attach geth.ipc Welcome to the Geth JavaScript console! instance: Geth/v1.10.14-stable-11a3a350/linux-amd64/go1.17.5 coinbase: 0x9f1c28a2c8d07d928968c3dd7201d672d04d4dfd at block: 6 (Sat Jan 01 2022 13:04:43 GMT+0000 (UTC)) datadir: /home/ubuntu/blockchain_nodes/node1 modules: admin:1.0 clique:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0


Ejecute lo siguiente. El número '1' debería aparecer ya que el nodo principal solo tiene un par.

 > net.peerCount 1


Para asegurarse de que todos los servicios de Geth se estén ejecutando, verifique los procesos. Asegúrese de ver los dos servicios Geth con la dirección pública correcta para los nodos.

 $ ps aux | grep geth ubuntu 856 1.8 17.2 1738404 170944 ? Sl Jan01 53:01 geth --nousb --datadir= --syncmode full --port 30310 --networkid 4649 --miner.gasprice 0 --miner.gastarget 470000000000 --http --http.addr 172.31.15.81 --http.corsdomain * --http.port 8545 --http.vhosts * --http.api admin,eth,miner,net,txpool,personal,web3 --mine --allow-insecure-unlock --unlock 0x9F1C28A2C8D07d928968C3Dd7201d672D04D4DfD --password password.txt ubuntu 873 1.8 15.7 1738396 156456 ? Sl Jan01 52:32 geth --nousb --datadir= --syncmode full --port 30311 --networkid 4649 --miner.gasprice 0 --miner.gastarget 470000000000 --http --http.addr 172.31.15.81 --http.corsdomain * --http.port 8546 --http.vhosts * --http.api admin,eth,miner,net,txpool,personal,web3 --mine --allow-insecure-unlock --unlock 0x7Bb542DEd40d0E6Bd01a1bAe39ec5E9984f36E48 --password password.txt ubuntu 7146 0.0 0.0 8168 664 pts/0 S+ 11:54 0:00 grep --color=auto geth