Ethereum 69: cómo configurar un nodo blockchain completamente sincronizado en 10 minutos

¡Bienvenido en el primer artículo de nuestra nueva serie go-ethereum!

En los próximos 10 minutos podrás:

  • Aprenda el primer glosario de blockchain sin ningún conocimiento previo necesario del ecosistema
  • Configure su nodo de prueba completamente sincronizado ("cliente / servidor") en menos de 10 minutos
  • Cree su cuenta y reciba una transacción de 8ETH de la fundación Ethereum GRATIS

Nuestro lema es, practicar antes que la teoría, ¡así que vamos directamente a la instalación de un nodo de prueba Ethereum completamente sincronizado conectado a una red de prueba Rinkeby!

Geth

Geth es una interfaz de línea de comandos (CLI), un binario compilado, un programa y un cliente para ejecutar un nodo Ethereum completo implementado en Go.

Usaremos Geth para:

  • ejecutar un nodo Ethereum completamente sincronizado para conectarse a una red de prueba llamada Rinkeby
  • cree una nueva cuenta para poder enviar y recibir transacciones
  • para leer el estado EVM, p. verificar el saldo de cualquier cuenta (¿quieres saber cuánto saldo tiene tu novia, novio, esposa, vecina? ¡Dulce transparencia!)

Instalando Geth

Podemos instalarlo directamente desde los repositorios:

Mac

Brew tap ethereum / ethereum
instalar cerveza ethereum

Linux

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa: ethereum / ethereum
sudo apt-get update
sudo apt-get install ethereum

Ventanas

Buena suerte :)

Verifique la instalación:

que geth
> / usr / local / bin / geth
versión geth
> Geth
> Versión: 1.8.20-estable

Asegúrese de estar ejecutando la misma versión para poder realizar una sincronización completa de una red Rinkeby, como se describe en los siguientes pasos, ya que Rinkeby actuó en un hardfork de Constantinopla compatible con Geth 1.8.20. ¡Esta publicación detallada del blog explica más detalles si está intrigado!

Ejecutando un nodo blockchain

Bueno, el diablo está en los detalles ... pero comenzar es realmente simple. Felicitaciones a los desarrolladores de Ethereum.

Vamos a configurar un nuevo nodo Rinkeby totalmente sincronizado (red de prueba Ethereum usando el protocolo Clique PoA).

La implementación de Poke Rinkeby es mucho más rápida pero significativamente menos segura. Está más centralizado desde el PoW de consenso de mainnet que está perfectamente bien siendo una red de prueba. Rinkeby logra aprobar un nuevo bloque con un montón de transacciones cada 15 años.

Ok, ok, ok ... ¿Qué significan realmente esas palabras?

  • Rinkeby: nombre de la red de prueba de Prueba de Autoridad
  • Nodo: básicamente un servidor tradicional que ejecuta el cliente / servidor Ethereum
  • Concensus: un algoritmo que define cómo se validarán, agregarán y persistirán las transacciones en la base de datos en cada nodo
  • Bloque: un grupo de transacciones en una matriz complicada que se envía alrededor del cable entre todos los nodos de la red cada 15 segundos
  • Transacción: no pienses en una transacción bancaria. Una transacción de blockchain es un cambio de estado. ¿Cambiar el nombre del propietario de un contrato inteligente de Alice a Bob? ¿Cambiar el saldo de su cuenta de 1ETH a 5ETH? ¿Configurando el valor variable “foo” en “foo_value_123” en su contrato inteligente? Esa es una transacción.

Puede leer más sobre la propuesta de Poke Rinkeby aquí: https://github.com/ethereum/EIPs/issues/225

geth --rinkeby --datadir = ~ / .gophersland_ethereum_r1 --port = 30304 --cache = 2048 --rpc --rpcport = 8546 --rpcapi = eth, web3, net, personal --syncmode = fast

El comando anterior:

  • inicialice un nuevo directorio donde se almacenarán todos los datos en ~ / .gophersland_ethereum_r1. El directorio predeterminado sería: ~ / .ethereum
  • comience a descargar el historial de Ethereum necesario para convertirse en un nuevo nodo de la red totalmente válido y sincronizado
  • la comunicación pasará por el puerto 30304
  • caché, una especie de búfer, se establecerá en 2 GB para acelerar el proceso de sincronización
  • Se lanzará una API RPC adicional para que podamos comunicarnos con nuestro nodo a través de consolas, una GUI agradable en el puerto 8546, más adelante

Espere unas horas hasta que la cadena de bloques esté completamente sincronizada.

El número de bloque actual a partir del 24 de septiembre es: 3039786. En mi AMD Ryzen 5 2600, 3.4Ghz, el proceso de sincronización tomó 3 horas. ¡Oh, sí, tengo una nueva PC para juegos!

Mientras tanto, puedes seguir a GophersLand en Twitter o preparar la cena, probablemente también el desayuno, ir al gimnasio ... digamos, blockchain no es la base de datos más rápida :)

Finalmente, el mensaje impreso será:

  • INFO [] Número de segmentos de cadena nuevos importados = 1
  • INFO [] Número de segmentos de cadena nuevos importados = 1
  • INFO [] Número de segmentos de cadena nuevos importados = 1
  • INFO [] Número de segmentos de cadena nuevos importados = 1

¡Felicidades, ahora eres parte de la revolución blockchain en menos de 10 minutos!

Creando tu primera cuenta blockchain

Keystore

Todas las cuentas de Ethereum y sus claves se almacenan en un directorio llamado "almacén de claves". El directorio está vacío de forma predeterminada ya que todavía no hemos creado nuestra propia cuenta.

enchanter @ lukas-gaming: ~ $ ls -la ~ / .gophersland_ethereum_r1 /
drwx ------ 4 enchanter enchanter 4096 sep 24 15:26.
drwxr-xr-x 18 enchanter enchanter 4096 sep 24 11:51 ..
drwx ------ 4 enchanter enchanter 4096 sep 24 15:26 geth
srw ------- 1 enchanter enchanter 0 sep 24 15:26 geth.ipc
drwx ------ 2 enchanter enchanter 4096 sep 23 09:54 keystore
enchanter @ lukas-gaming: ~ $ ls -la ~ / .gophersland_ethereum_r1 / keystore /
drwx ------ 2 enchanter enchanter 4096 sep 23 09:54.
drwx ------ 4 enchanter enchanter 4096 sep 24 15:26 ..

Cuenta

Para crear una nueva cuenta, ejecute el siguiente, ya familiar, geth cmd.

geth --datadir = ~ / .gophersland_ethereum_r1 cuenta nueva

Se le pedirá que ingrese una frase de contraseña (esta es su CONTRASEÑA SUPER SECRETA). Esto es necesario para descifrar su clave privada recién generada asociada con su nueva dirección de Ethereum, ya que le permite usarla más adelante para firmar transacciones en la cadena de bloques. Anótelo en alguna parte, ya que lo necesitaremos más tarde. Pero no se preocupe si lo olvida, de todos modos esta es solo una red de prueba.

enchanter @ lukas-gaming: ~ $ ls -la ~ / .gophersland_ethereum_r1 / keystore /
drwx ------ 2 enchanter enchanter 4096 sep 23 09:54.
drwx ------ 4 enchanter enchanter 4096 sep 24 15:26 ..
enchanter @ lukas-gaming: ~ $ geth --datadir = ~ / .gophersland_ethereum_r1 cuenta nueva
INFORMACIÓN [09-24 | 15: 36: 33.566] Recuento máximo de pares ETH = 25 LES = 0 total = 25
Su nueva cuenta está bloqueada con una contraseña. Por favor da una contraseña. No olvides esta contraseña.
Frase de contraseña:
Repetir frase de contraseña:
Dirección: {ceee57f2b700c2f37d1476a7974965e149fce2d4}
enchanter @ lukas-gaming: ~ $ ls -la ~ / .gophersland_ethereum_r1 / keystore /
drwx ------ 2 enchanter enchanter 4096 sep 24 15:36.
drwx ------ 4 enchanter enchanter 4096 sep 24 15:26 ..
-rw ------- 1 enchanter enchanter 491 sep 24 15:36
UTC - 2018-09-24T13-36-43.069452577Z - ceee57f2b700c2f37d1476a7974965e149fce2d4

Woohoo! Mi nueva dirección de Ethereum está viva: ceee57f2b700c2f37d1476a7974965e149fce2d4.

Normalmente encontrará esta dirección con el prefijo "0x" para indicar la codificación de la dirección, HEX.

El formato más nuevo de los archivos de claves es: UTC - - . El orden de las cuentas cuando se enumera es lexicográfico, pero como consecuencia del formato de marca de tiempo, en realidad está en orden de creación.

Si tiene curiosidad por saber qué hay dentro del archivo, ¡no dude en abrirlo! Ya verás:

  • Dirección: su nueva dirección hexadecimal
  • Crypto: grupo de variables matemáticas responsables de representar su clave privada en forma cifrada, no se preocupe por esa magia por ahora

Nota interesante: la generación de la cuenta ocurre en modo fuera de línea y no requiere un nodo blockchain sincronizado. ¿Curioso cómo es posible generar una dirección única en un modo fuera de línea desde la perspectiva técnica? Revisaremos el código fuente de go-ethereum en el próximo artículo.

Spoiler: es porque la dirección es un hash de su clave pública que se basa en su clave privada única.

Bien, tengo una nueva cuenta brillante de Ethereum, ¿cuál es mi saldo y cómo deposito algunas pruebas de Ether?

Hablando de Ether ... ¿qué es en realidad?

Éter

Ether es la criptomoneda que alimenta la red Ethereum. Se utiliza como una unidad de valor y para pagar a los mineros por validar, agregar y persistir las transacciones en la base de datos colectiva. Pero principalmente es una técnica para prevenir el SPAM porque los mineros son recompensados ​​con 5 (desde el mes pasado "solo" 3) ETH por cada bloque extraído con éxito. Sí, eso es $ 600 al precio actual el 24 de septiembre, cada 15 años. No es un mal negocio.

Cómo recibir una transacción de 8ETH de la fundación Ethereum GRATIS

Saldo de cuenta corriente

Asegurémonos de que el saldo de nuestra cuenta sea 0 primero, a menos que alguien ya haya logrado enviar un poco de Ether por la bondad de su corazón.

Geth proporciona una consola de JavaScript que se puede conectar al binario ejecutable para interactuar convenientemente con la cadena de bloques. Podemos conectarnos a él especificando un archivo de socket que se expone una vez que Geth se inicia. Los archivos de socket son muy útiles para la "comunicación entre procesos en la misma máquina", también conocido como IPC.

Puede ubicar este archivo en el directorio de datos predeterminado mientras se ejecuta el programa Geth:

enchanter @ lukas-gaming: ~ $ ls -la ~ / .gophersland_ethereum_r1 /
drwx ------ 4 enchanter enchanter 4096 24 de septiembre 15:44.
drwxr-xr-x 18 enchanter enchanter 4096 24 de septiembre 15:47 ..
drwx ------ 4 enchanter enchanter 4096 24 de septiembre 15:44 geth
srw ------- 1 enchanter enchanter 0 24 de septiembre 15:44 geth.ipc
drwx ------ 2 enchanter enchanter 4096 24 de septiembre 15:47 almacén de claves

Interactuemos con la red Rinkeby usando el cmd "geth attach" en otra terminal mientras su nodo blockchain aún se está ejecutando. Asegúrese de pasar la ruta absoluta al archivo IPC, de lo contrario obtendrá un error.

enchanter @ lukas-gaming: ~ $ geth attach ipc: /home/enchanter/.gophersland_ethereum_r1/geth.ipc
¡Bienvenido a la consola Geth JavaScript!
instancia: Geth / v1.8.15-stable-89451f7c / linux-amd64 / go1.10.1
base de monedas: 0xceee57f2b700c2f37d1476a7974965e149fce2d4
en el bloque: 3044891 (lunes, 24 de septiembre de 2018 16:42:36 CEST)
datadir: /home/enchanter/.gophersland_ethereum_r1
módulos: 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
> eth.accounts
["0xceee57f2b700c2f37d1476a7974965e149fce2d4"]
> eth.syncing
falso
> eth.getBalance ("0xceee57f2b700c2f37d1476a7974965e149fce2d4")
0 0

Consulta blockchain:

eth.accounts: para verificar sus cuentas disponibles actualmente

eth.syncing: para garantizar nuestro estado, DB está completamente actualizado con el resto de la red para garantizar que la respuesta de getBalance se basará en el último estado

eth.getBalance (""): para consultar la base de datos.

Recibir una transacción de 8ETH de la fundación Ethereum GRATIS

La fundación Ethereum tiene un programa muy bueno llamado "Faucet" disponible en línea para asignar Ether a cuentas que lo soliciten en tiempo real.

Éter solicitante:

  1. Publique la dirección de su cuenta en una de las redes sociales públicas.
  2. Por ejemplo, publique un tweet que contenga su dirección de Ethereum en cualquier parte del tweet como este https://twitter.com/EnchanterIO/status/1044238559224483841, asegúrese de etiquetar @BlocksByLukas y @freeCodeCamp y háganos saber si le gusta el tutorial.
  3. Abra https://www.rinkeby.io/#faucet y pegue la URL del tweet
  4. Haga clic en "Give me Ether", elija entre 3, 7.5 o 18.75 Ether
  5. Espera unos segundos
  6. Consulta el saldo de tu cuenta nuevamente
Grifo Rinkeby

Voilà

Eres rico ... en una red de prueba. Felicidades por llegar tan lejos. Más contenido próximamente!

Continuar en mi curso: Ethereum 101

https://www.lukaslukac.io/courses/ethereum-101-glossary-smart-contracts-tests-frameworks