Ethereum 69: come impostare un nodo blockchain completamente sincronizzato in 10 minuti

Benvenuti nel primo articolo della nostra nuova serie go-ethereum!

Nei prossimi 10 minuti dovrai:

  • Scopri il primo glossario della blockchain senza alcuna conoscenza preliminare dell'ecosistema
  • Imposta il nodo di test completamente sincronizzato ("client / server") in meno di 10 minuti
  • Crea il tuo account e ricevi una transazione di 8ETH dalla fondazione Ethereum GRATUITAMENTE

Il nostro motto è, pratica prima della teoria - quindi passiamo direttamente all'installazione di un nodo di test Ethereum completamente sincronizzato collegato a una rete di test Rinkeby!

Geth

Geth è un'interfaccia a riga di comando (CLI), un file binario compilato, un programma e un client per l'esecuzione di un nodo Ethereum completo implementato in Go.

Useremo Geth per:

  • eseguire un nodo Ethereum completamente sincronizzato per connettersi a una rete di test chiamata Rinkeby
  • creare un nuovo account per poter inviare e ricevere transazioni
  • per leggere lo stato EVM, ad es. controllando un saldo di qualsiasi conto (vuoi sapere quanto saldo ha la tua ragazza, ragazzo, moglie, vicino? Dolce trasparenza!)

Installazione di Geth

Possiamo installarlo direttamente dai repository:

Mac

brew tap ethereum / ethereum
brew install 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

finestre

In bocca al lupo :)

Verifica l'installazione:

quale geth
> / usr / local / bin / geth
versione geth
> Geth
> Versione: 1.8.20-stabile

Assicurati di eseguire la stessa versione per poter eseguire una sincronizzazione completa di una rete Rinkeby, come descritto nei passaggi successivi perché Rinkeby ha eseguito un'azione di costante costante supportata da Geth 1.8.20. Questo post dettagliato sul blog spiega ulteriori dettagli se sei incuriosito!

Esecuzione di un nodo blockchain

Bene, il diavolo è nei dettagli ... ma iniziare è in realtà semplice. Complimenti agli sviluppatori di Ethereum.

Configuriamo un nuovo nodo Rinkeby completamente sincronizzato (rete di test Ethereum che utilizza il protocollo Clique PoA).

L'implementazione di Rinkeby PoA è molto più veloce ma significativamente meno sicura. È più centralizzato dal consenso Ponet su mainnet, che è perfettamente una rete di test. Rinkeby riesce ad approvare un nuovo blocco con un mucchio di transazioni ogni 15 secondi.

Ok, ok, ok ... Cosa significano quelle parole?

  • Rinkeby: nome della rete di prova Proof of Authority
  • Nodo: sostanzialmente un server tradizionale che esegue client / server Ethereum
  • Consenso: un algoritmo che definisce come le transazioni verranno convalidate, aggiunte e mantenute nel database su ogni nodo
  • Blocco: un gruppo di transazioni in un array complicato inviato attorno al filo tra tutti i nodi della rete ogni 15 secondi
  • Transazione: non pensare a una transazione bancaria. Una transazione blockchain è un cambio di stato. Rinominare il proprietario di un contratto intelligente da Alice a Bob? Modifica del saldo del tuo conto da 1ETH a 5ETH? Impostare il valore variabile "foo" su "foo_value_123" nel tuo contratto intelligente? Questa è una transazione.

Puoi leggere di più sulla proposta PoA Rinkeby qui: 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

Il comando sopra sarà:

  • inizializza una nuova directory in cui tutti i dati verranno archiviati in ~ / .gophersland_ethereum_r1. La directory predefinita sarebbe: ~ / .ethereum
  • iniziare a scaricare la cronologia di Ethereum necessaria per diventare un nuovo nodo sincronizzato completamente valido della rete
  • la comunicazione avverrà sulla porta 30304
  • cache, una specie di buffer, verrà impostato su 2 GB per accelerare il processo di sincronizzazione
  • Verrà avviata un'API RPC aggiuntiva in modo da poter comunicare con il nostro nodo tramite console, bella interfaccia grafica sulla porta 8546, in seguito

Attendi alcune ore fino a quando la blockchain è completamente sincronizzata.

Il numero di blocco attuale al 24 settembre è: 3039786. Sul mio AMD Ryzen 5 2600, 3,4 Ghz, il processo di sincronizzazione è durato 3 ore. Oh sì, ho un nuovo PC da gioco!

Nel frattempo puoi seguire GophersLand su Twitter o preparare la cena, probabilmente anche la colazione, andare in palestra ... diciamo solo, blockchain non è il database più veloce :)

Alla fine il messaggio stampato sarà:

  • INFO [
  • INFO [
  • INFO [
  • INFO [

Congratulazioni, ora fai parte della rivoluzione blockchain in meno di 10 minuti !!!

Crea il tuo primo account blockchain

keystore

Tutti gli account Ethereum e le loro chiavi sono memorizzati in una directory chiamata "keystore". La directory è vuota per impostazione predefinita poiché non abbiamo ancora creato il nostro account!

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

account

Per creare un nuovo account, eseguire il cmh geth seguente, già familiare.

geth --datadir = ~ / .gophersland_ethereum_r1 account nuovo

Ti verrà richiesto di inserire una passphrase (questa è la tua PASSWORD SUPER SEGRETA). Ciò è necessario per decrittografare la chiave privata appena generata associata al nuovo indirizzo Ethereum, in quanto consente di utilizzarla in un secondo momento per la firma delle transazioni sulla blockchain. Nota da qualche parte, dal momento che ne avremo bisogno in seguito. Ma non preoccuparti se lo dimentichi, questa è comunque solo una rete di test.

enchanter @ lukas-gaming: ~ $ ls -la ~ / .gophersland_ethereum_r1 / keystore /
drwx ------ 2 incantatore incantatore 4096 settembre 23 09:54.
drwx ------ incantatore a 4 incantatori 4096 set 24 15:26 ..
enchanter @ lukas-gaming: ~ $ geth --datadir = ~ / .gophersland_ethereum_r1 account new
INFO [09-24 | 15: 36: 33.566] Conteggio peer massimo ETH = 25 LES = 0 totale = 25
Il tuo nuovo account è bloccato con una password. Per favore, inserisci una password. Non dimenticare questa password.
Frase d'accesso:
Ripeti la passphrase:
Indirizzo: {ceee57f2b700c2f37d1476a7974965e149fce2d4}
enchanter @ lukas-gaming: ~ $ ls -la ~ / .gophersland_ethereum_r1 / keystore /
drwx ------ 2 incantatore incantatore 4096 set 24 15:36.
drwx ------ incantatore a 4 incantatori 4096 set 24 15:26 ..
-rw ------- 1 incantatore incantatore 491 set 24 15:36
UTC - 2018-09-24T13-36-43.069452577Z - ceee57f2b700c2f37d1476a7974965e149fce2d4

Woohoo! Il mio nuovo indirizzo Ethereum è attivo: ceee57f2b700c2f37d1476a7974965e149fce2d4.

Normalmente incontrerai questo indirizzo con il prefisso “0x” per indicare la codifica dell'indirizzo, HEX.

Il formato più recente dei file di chiavi è: UTC - - . L'ordine dei conti quando l'elenco è lessicografico, ma come conseguenza del formato timepamp, è in realtà in ordine di creazione.

Se sei curioso di sapere cosa c'è dentro il file, sentiti libero di aprirlo! Vedrai:

  • Indirizzo: il tuo nuovo indirizzo esadecimale
  • Crypto: gruppo di variabili matematiche responsabili della rappresentazione della tua chiave privata in forma crittografata, per ora non preoccuparti di quella magia

Nota interessante: la generazione dell'account avviene in modalità offline e non richiede un nodo blockchain sincronizzato. Curioso come è possibile generare un indirizzo univoco in modalità offline dal punto di vista tecnico? Controlleremo il codice sorgente go-ethereum stesso nel prossimo articolo.

Spoiler: è perché l'indirizzo è un hash della tua chiave pubblica basato sulla tua chiave privata univoca.

Ok, ho un nuovo account di Ethereum shinny, qual è il mio saldo e come posso depositare alcuni test su Ether?

A proposito di Ether ... che cos'è in realtà?

Etere

Ether è la criptovaluta che alimenta la rete Ethereum. Viene utilizzato come unità di valore e per pagare i minatori per la convalida, l'aggiunta e la persistenza delle transazioni nel DB collettivo. Ma soprattutto è una tecnica per prevenire lo SPAM perché i minatori vengono premiati 5 (dallo scorso mese "solo" 3) ETH per ogni blocco estratto con successo. Sì, sono $ 600 al prezzo attuale il 24 settembre, ogni 15 secondi. Non è un brutto affare.

Come ricevere GRATUITAMENTE una transazione di 8ETH dalla fondazione Ethereum

Verifica del saldo del conto

Assicuriamoci che il saldo del nostro conto sia 0 per primo, a meno che qualcuno non sia già riuscito a inviare un po 'di Ether dalla bontà del loro cuore.

Geth fornisce una console JavaScript che può essere collegata al file binario eseguibile per interagire comodamente con la blockchain. Possiamo collegarci specificando un file socket che viene esposto una volta avviato Geth. I file socket sono molto utili per la "comunicazione tra processi sulla stessa macchina", ovvero IPC.

È possibile individuare questo file nella directory dei dati predefinita mentre è in esecuzione il programma Geth:

incantatore @ lukas-gaming: ~ $ ls -la ~ / .gophersland_ethereum_r1 /
drwx ------ 4 incantatore incantatore 4096 24 set 15:44.
drwxr-xr-x 18 incantatore incantatore 4096 24 set 15:47 ..
drwx ------ 4 incantatore incantatore 4096 24 set 15:44 geth
srw ------- 1 incantatore incantatore 0 set 24 15:44 geth.ipc
drwx ------ 2 incantatore incantatore 4096 set 24 15:47 keystore

Interagiamo con la rete Rinkeby utilizzando il cmd "geth attach" in un altro terminale mentre il nodo blockchain è ancora in esecuzione. Assicurati di passare il percorso assoluto al file IPC, altrimenti otterrai un errore.

enchanter @ lukas-gaming: ~ $ geth attach ipc: /home/enchanter/.gophersland_ethereum_r1/geth.ipc
Benvenuti nella console JavaScript di Geth!
istanza: Geth / v1.8.15-stable-89451f7c / linux-amd64 / go1.10.1
portamonete: 0xceee57f2b700c2f37d1476a7974965e149fce2d4
al blocco: 3044891 (lun, 24 set 2018 16:42:36 CEST)
datadir: /home/enchanter/.gophersland_ethereum_r1
moduli: admin: 1.0 cricca: 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

Query blockchain:

eth.accounts: per controllare gli account attualmente disponibili

eth.syncing: per assicurarsi che il nostro stato, DB sia completamente aggiornato con il resto della rete per garantire che la risposta getBalance sia basata sull'ultimo stato

eth.getBalance (“”): per interrogare il DB.

Ricezione GRATUITA di una transazione di 8ETH dalla fondazione Ethereum

La fondazione Ethereum ha un programma molto preciso chiamato "Faucet" disponibile online per assegnare Ether agli account che lo richiedono in tempo reale.

Ether richiesto:

  1. Pubblica l'indirizzo del tuo account su uno dei social network pubblici
  2. Ad esempio, pubblica un tweet contenente il tuo indirizzo Ethereum ovunque nel tweet come questo https://twitter.com/EnchanterIO/status/1044238559224483841, assicurati di taggare @BlocksByLukas e @freeCodeCamp e facci sapere se ti piace il tutorial!
  3. Apri https://www.rinkeby.io/#faucet e incolla l'URL del tweet
  4. Fai clic su "Give me Ether", scegli tra 3, 7.5 o 18.75 Ether
  5. Aspetta qualche secondo
  6. Interroga nuovamente il saldo del tuo account
Rubinetto Rinkeby

Ecco

Sei ricco ... in una rete di test. Congratulazioni per essere arrivato così lontano. Altri contenuti in arrivo!

Continua nel mio corso: Ethereum 101

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