Ethereum 69: Cómo configurar un nodo Blockchain completamente sincronizado en 10 minutos

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

En los próximos 10 minutos:

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

Nuestro lema es, la práctica antes que la teoría, ¡así que vayamos 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, programa y cliente compilados 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
  • crear una nueva cuenta para poder enviar y recibir transacciones
  • para leer el estado de EVM, por ejemplo, verificar el saldo de cualquier cuenta (¿quieres saber cuánto saldo tiene tu novia, novio, esposa, vecino? ¡Dulce transparencia!)

Instalación de Geth

Podemos instalarlo directamente desde los repositorios:

Mac

brew tap ethereum/ethereumbrew install ethereum

Linux

sudo apt-get install software-properties-commonsudo add-apt-repository -y ppa:ethereum/ethereumsudo apt-get updatesudo apt-get install ethereum

Ventanas

Good luck :)

Verifique la instalación:

which geth> /usr/local/bin/geth
geth version> Geth> Version: 1.8.20-stable

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 porque Rinkeby accionó un hardfork de Constantinopla compatible con Geth 1.8.20.

Ejecutando un nodo blockchain

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

Configuremos un nuevo nodo Rinkeby (red de prueba Ethereum que usa el protocolo Clique PoA) completamente sincronizado .

La implementación de Rinkeby PoA 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 segundos.

Ok, ok, ok ... ¿Qué significan esas palabras en realidad?

  • 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 conservarán las transacciones en la base de datos de cada nodo.
  • Bloque: un montón de transacciones en una matriz complicada distribuida 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? ¿Establecer el valor de la variable "foo" en "foo_value_123" en su contrato inteligente? Eso es una transacción.

Puede leer más sobre la propuesta de Rinkeby PoA aquí: //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 ~/.gophersland_ethereum_r1. El directorio predeterminado sería:~/.ethereum
  • comenzar a descargar el historial de Ethereum necesario para convertirse en un nuevo nodo de la red totalmente válido y sincronizado
  • la comunicación se realizará a través del puerto 30304
  • caché, una especie de búfer, se configurará en 2 GB para acelerar el proceso de sincronización
  • Se lanzará una API de RPC adicional para que podamos comunicarnos con nuestro nodo a través de consolas, una buena GUI 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 al 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, puede seguir a Web3Coach en Twitter o preparar la cena, probablemente el desayuno también, ir al gimnasio ... digamos que blockchain no es la base de datos más rápida :)

Finalmente, el mensaje impreso será:

  • INFO [] Recuento de nuevos segmentos de cadena importados = 1
  • INFO [] Recuento de nuevos segmentos de cadena importados = 1
  • INFO [] Recuento de nuevos segmentos de cadena importados = 1
  • INFO [] Recuento de nuevos segmentos de cadena importados = 1

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

Creando tu primera cuenta blockchain

Almacén de claves

All the Ethereum accounts and their keys are stored in a directory called the “keystore”. The directory is empty by default as we haven’t created our own account yet!

[email protected]:~$ 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 gethsrw------- 1 enchanter enchanter 0 sep 24 15:26 geth.ipcdrwx------ 2 enchanter enchanter 4096 sep 23 09:54 keystore
[email protected]:~$ ls -la ~/.gophersland_ethereum_r1/keystore/
drwx------ 2 enchanter enchanter 4096 sep 23 09:54 .drwx------ 4 enchanter enchanter 4096 sep 24 15:26 ..

Account

To create a new account, execute the following, already familiar, geth cmd.

geth --datadir=~/.gophersland_ethereum_r1 account new

You will be prompted to enter a passphrase (this is your SUPER SECRET PASSWORD). This is required for decrypting your newly generated private key associated with your new Ethereum address, as it allows you to use it later on for signing transactions on the blockchain. Note it down somewhere, since we will need it later. But don’t worry if you forget it, this is just a test network anyway.

[email protected]:~$ ls -la ~/.gophersland_ethereum_r1/keystore/
drwx------ 2 enchanter enchanter 4096 sep 23 09:54 .drwx------ 4 enchanter enchanter 4096 sep 24 15:26 ..
[email protected]:~$ geth --datadir=~/.gophersland_ethereum_r1 account new
INFO [09-24|15:36:33.566] Maximum peer count ETH=25 LES=0 total=25
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase: Repeat passphrase:
Address: {ceee57f2b700c2f37d1476a7974965e149fce2d4}
[email protected]:~$ 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! My new Ethereum address is alive: ceee57f2b700c2f37d1476a7974965e149fce2d4.

You will normally encounter this address prefixed with “0x” to indicate the address encoding, HEX.

The newest format of the keyfiles is: UTC---encoding>. The order of accounts when listing is lexicographic, but as a consequence of the timespamp format, it is actually in order of creation.

If you are curious what is inside of the file, feel free to open it! You will see:

  • Address: your new hex address
  • Crypto: bunch of mathematical variables responsible for representing your private key in encrypted form, don’t worry about that magic for now

Interesting note: the account generation happens in offline mode and doesn’t require a synced blockchain node. Curious how is it possible to generate a unique address in an offline mode from the technical perspective? We will check out the go-ethereum source code itself in the next article.

Spoiler: it’s because the address is a hash of your public key which is based on your unique, private key.

Okay I have a new shinny Ethereum account, what’s my balance and how do I deposit some testing Ether?

Speaking of Ether… what is it actually?

Ether

Ether is the cryptocurrency powering the Ethereum network. It’s used as a unit of value and for paying miners for validating, appending, and persisting the transactions to the collective DB. But mainly its a technique for preventing SPAM because miners are rewarded 5 (since last month “just” 3) ETH for each successfully mined block. Yes, that’s $600 at the current price on 24th of September, every 15s. Not a bad business.

How to receive a transaction of 8ETH from the Ethereum foundation for FREE

Checking account balance

Let’s make sure our account balance is 0 first, unless someone already managed to send some Ether out of the goodness of their heart.

Geth provides a JavaScript console that can be attached to the executable binary for interacting with the blockchain conveniently. We can connect to it by specifying a socket file that is exposed once Geth boots up. Socket files are very useful for “inter process communication on the same machine”, aka IPC.

You can locate this file in the the default data directory while the Geth program is running:

[email protected]:~$ ls -la ~/.gophersland_ethereum_r1/
drwx------ 4 enchanter enchanter 4096 Sep 24 15:44 .drwxr-xr-x 18 enchanter enchanter 4096 Sep 24 15:47 ..drwx------ 4 enchanter enchanter 4096 Sep 24 15:44 gethsrw------- 1 enchanter enchanter 0 Sep 24 15:44 geth.ipcdrwx------ 2 enchanter enchanter 4096 Sep 24 15:47 keystore

Let’s interact with the Rinkeby network using the “geth attach” cmd in another terminal while your blockchain node is still running. Make sure to pass the absolute path to the IPC file, otherwise you will get an error.

[email protected]:~$ geth attach ipc:/home/enchanter/.gophersland_ethereum_r1/geth.ipc
Welcome to the Geth JavaScript console!
instance: Geth/v1.8.15-stable-89451f7c/linux-amd64/go1.10.1coinbase: 0xceee57f2b700c2f37d1476a7974965e149fce2d4at block: 3044891 (Mon, 24 Sep 2018 16:42:36 CEST)
datadir: /home/enchanter/.gophersland_ethereum_r1modules: 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.syncingfalse
> eth.getBalance("0xceee57f2b700c2f37d1476a7974965e149fce2d4")0

Query blockchain:

eth.accounts: to check your currently available accounts

eth.syncing: to make sure our state, DB is fully up to date with rest of the network to ensure the getBalance response will be based on the latest state

eth.getBalance(“gt;”): to query the DB.

Receiving a transaction of 8ETH from the Ethereum foundation for FREE

The Ethereum foundation has a very neat program called “Faucet” available online for assigning Ether to accounts requesting it in real-time.

Requesting Ether:

  1. Publish your account address on one of the public social networks
  2. E.g, post a tweet containing your Ethereum address anywhere in the tweet like this one //twitter.com/EnchanterIO/status/1044238559224483841, make sure you tag @Web3Coach and @freeCodeCamp and let us know if you like the tutorial!
  3. Open //www.rinkeby.io/#faucet and paste the tweet URL
  4. Click on “Give me Ether”, choose between 3, 7.5 or 18.75 Ether
  5. Wait few seconds
  6. Query your account balance again

Original text


Voilà

You are rich… in a test network. Congratulation for getting so far.

You can continue expanding your blockchain skills by building one from scratch in Go!"