Sviluppare applicazioni per Ethereum con GETH | EtherEvolution

Lorenzo Disilvestro
5 min readJun 8, 2020

--

Come abbiamo ormai ripetuto in più articoli, ci stiamo avvicinando alla versione 2.0 di Ethereum, ma molti oltre ad investire nella moneta ether, si saranno avvicinati ad Ethereum anche per la sua polivalenza, prevalentemente data dagli smart contract, e quale migliore occasione di questo prossimo evento per mettersi a studiare come poter interagire con la blockchain di Ethereum.

Primi passi con Testrpc

Chiave primaria dello studio in questione sarà l’uso e le metodologie di accesso alla EVM (Ethereum Virtual Machne).

L’interazione con tale sistema ci permetterà di non dover gestire da subito un nodo intero nella blockchain Ethereum, cosa che risulterebbe essere anche molto costosa. Se volete cimentarvi nello sviluppo, o già siete degli sviluppatori, vi sarà molto più semplice cominciare con TESTRPC.

NOTA

Gestire un nodo completo per potersi unire alla rete Ethereum, prevede di lanciare il client, scaricare la cronologia completa delle transazioni della blockchain (oltre 100 GB), per poter successivamente iniziare a minare ether.

Testrpc sarà quindi il nostro “simulatore”; nato originariamente come progetto Opensource, è stato successivamente acquistato dalla società Truffle Framework, ed usato per lo sviluppo del loro software per Smart Contract “ Ganache CLI “.

Come creare l’ambiente di sviluppo su Ethereum

Per procedere con la creazione dell’ambiente di sviluppo di cui avremo bisogno, dovremo installare sulla nostra macchina Linux (fisica o virtuale che sia) il pacchetto NodeJS, ed il suo package manager NPM (recentemente diventato parte integrante di Github). Essendo molte e varie le versioni di Linux oggi esistenti e, non essendo l’installazione dei pacchetti oggetto di questo articolo, ci limiteremo ad indicare l’installazione dei pacchetti in questione su di una macchina RedHat compliant (Centos e/o Fedora).

Successivamente, avremo bisogno anche dell’installazione di Ganache CLI e Testrpc.

E’ tempo di usare GANACHE

Prima di partire con il laboratorio, dobbiamo distinguere due fasi ben distinte del processo di modifica e scrittura di una transazione sul DLT Ethereum

  • creare la transazione da mettere nel pool;
  • prendere le transazioni in attesa, facendo mining, scrivendole materialmente nel database di Ethereum;

Proprio per rendere più agevole la scrittura ed il relativo test degli smart contract, è stato creato il tool “ganache-cli”. In questo tool si rendono possibili contemporaneamente sia le operazioni di processazione che di mining, senza tempi di attesa tipiche del mining produttivo, poichè le transazioni vengono scritte man mano che vengono generate.

Adesso che abbiamo tutti i pacchetti necessari a far partire l’ambiente di test, inizieremo con Ganache, il quale creerà per noi 10 conti (coppie di indirizzi a chiave pubblica con relativa chiave privata) del tutto casuali con un valore ciascuno di ipotetici 100 ether.

Esempio:

“`
~$ ganache-cli
Ganache CLI v6.9.1 (ganache-core: 2.10.2)

Available Accounts
==================
(0) 0xC7dAcb4210c6611449782FDA0Fe9AB0eEfBD2e20 (100 ETH)
(1) 0x7b1F26B500A8B3eC7cCC52e430fa5fFA28745f85 (100 ETH)
(2) 0x9869E3de7a5F8053fDF4cfd80b7f25444426BCA9 (100 ETH)
(3) 0xb792A0fa3ce2580775FB74C56D42b04Cba566934 (100 ETH)
(4) 0x62F0074450411bAeFB2Cd27eE24d8745F71E2AB3 (100 ETH)
(5) 0xeB6113B53a01B21FB4bEE592825C53a359D4c8C7 (100 ETH)
(6) 0x0Ad5082619135A7cccE9AfC10087eAF4e35a6a71 (100 ETH)
(7) 0xd19565db7ED985bF1f5701001f8806BB2d53D726 (100 ETH)
(8) 0x0954B7189D733a4b94CfF1CCC22F2eb777763521 (100 ETH)
(9) 0x17820E0b9FFb587201C59b7E620Ec8639b0c89Ae (100 ETH)

Private Keys
==================
(0) 0x178b3f900059761ef82962b590173f7e9f9136745e6d93e581f77b8e9eca8396
(1) 0xbc102b779097cdb0c4b2253012da93ea881d139c62ea516cf9f56d89a00e7936
(2) 0x728cc5ddf00e8bdb4b3b475d740d740a691b1ccf59d0d89a751a7abe37888213
(3) 0x6babd274335e3d712255c5edd306982246cdf31dd5cd02fed0df23337ae1a83c
(4) 0x7b65c8651efbedeb5cc2d2cd02937d3dc5781590047fd5fdb3400b14cf104d92
(5) 0x5da719caf1707b176f2309181d2996ca26809549b9cf31b6ce5358c0a8f681d1
(6) 0x2ad101a5abbf079aea3698b2e0dc2c7bf7c656d4a5230d5f63653050b5ba5b3e
(7) 0xa0a32d45bdbb740c008bcd8f4d8f71c16d806a4538554e9d0b5e06647bcf8afe
(8) 0xa1bb48345c275088a04674b15a3b2206bcfd5981dfe794ff50d9be438d35da54
(9) 0x1a4a1b6244209292f47f54f95754c5a65ba3900c650a80298ce26fb58ac2ae67

Call Gas Limit
==================
9007199254740991

Listening on 127.0.0.1:8545

“`

Bene, come abbiamo potuto leggere, sono stati creati i 10 utenti con cui possiamo lanciare Testrpc usando il set di conti appena generati.

“`
$ ganache-cli -account=”0x178b3f900059761ef82962b590173f7e9f9136745e6d93e581f77b8e9eca8396,balance” -account=”0xbc102b779097cdb0c4b2253012da93ea881d139c62ea516cf9f56d89a00e7936,balance”
Ganache CLI v6.9.1 (ganache-core: 2.10.2)

Call Gas Limit
==================
9007199254740991

Listening on 127.0.0.1:8545

“`

Testrpc, come abbiamo avuto modo di vedere è un completo simulatore per Ethereum blockchain, inoltre, non dovendo svolgere alcuna attività di creazione, mining o sincronizzazione dei blocchi, risulta anche essere molto più veloce di un nodo LIVE.

Una volta avviato il nodo con Testrpc potremo proseguire con la creazione del nostro ambiente usando il programma **GETH** che ci permetterà di inviare alla rete di Ethereum, comandi e richieste di interazione. Quello che dobbiamo fare adesso è connetterci con il comando GETH al nodo specificando il nostro indirizzo IP (si può usare anche localhost) e la porta di connessione.

Avviamo il nodo

$ geth attach http://localhost:8545
Welcome to the Geth JavaScript console!

GETH ci aprirà così una console interattiva, dalla quale si potrà utilizzare l’API Javascript di Ethereum per accedere alla blockchain.

Ora creaiamo un nuovo conto:

“`
> personal.newAccount()
Passphrase:
Repeat passphrase:
“0xce91466ebc9159e81757ec7b0e0e795a4a2b7d2d”
“`

N.B.: ricordiamoci sempre che ogni conto è costituito da una “coppia di chiavi”, una pubblica ed una privata, ma solo la chiave pubblica viene registrata nella blockchain, per ogni transazione di questo conto.

Ora che abbiamo generato il conto, tramite l’uso dei prossimi comandi (ripetendoli più volte), vedrete comparire man mano alcuni conti nell’elenco eth.accounts

“`
> eth.accounts
[“0xc7dacb4210c6611449782fda0fe9ab0eefbd2e20”, “0x7b1f26b500a8b3ec7ccc52e430fa5ffa28745f85”, “0xce91466ebc9159e81757ec7b0e0e795a4a2b7d2d”]

“`

Ogni volta che creerete dei conti tramite l’utilizzo di GETH, le chiavi private del conto, verranno memorizzate nel file keystore, nel file system del nodo. Bisogna inoltre differenziare il fatto che, in un nodo Ethereum live (dunque non Testrpc), iniziereste a minare, e successivamente depositare gli ether minati, in uno qualunque dei vostri conti.

Proseguendo con il test e l’utilizzo di GETH, dobbiamo ricordare che esso, non viene utilizzato soltanto in progetti di test, anzi, se lanciate GETH con le opzioni di default, ci si potrà connetere alla blockchain pubblica di Ethereum.

Tenete ben presente che una volta lanciato GETH per la connesione live pubblica, ci potrebbero volere diverse ore e svariati GB di spaizo disco per poter scaricare e sincronizzare l’intera cronologia della blockchain.

Esempio
“`
$ geth -testnet
INFO [05–27|01:13:37.327] Maximum peer count ETH=50 LES=0 total=50
INFO [05–27|01:13:37.327] Smartcard socket not found, disabling err=”stat /run/pcscd/pcscd.comm: no such file or directory”
INFO [05–27|01:13:37.402] Starting peer-to-peer node instance=Geth/v1.9.12-stable-b6f1c8dc/linux-amd64/go1.13.8
INFO [05–27|01:13:37.403] Allocated trie memory caches clean=256.00MiB dirty=256.00MiB
INFO [05–27|01:13:37.403] Allocated cache and file handles database=/home/lorenzo/.ethereum/testnet/geth/chaindata cache=512.00MiB handles=524288

“`

Conclusioni

E’ quindi chiaro che, per gli sviluppatori, è spesso una buona idea imparare a creare e gestire una propria rete privata Ethereum di test, poichè anche l’impiego di una rete composta da un’unico nodo, spesso è più che sufficiente per le attività di sviluppo.

Questo articolo sarà parte di una serie di articoli, che avranno la funzione di spiegare al meglio cosa c’è dietro l’aspetto tecnico di un token, come si possono generare per permetterci di fare i nostri test, ma anche per capire come funzionano le transazioni che molti di voi gia usano.

Nella seconda parte dell’articolo, analizzeremo con qualche esempio, lo sviluppo di uno smart contract scritto in Solidity, e faremo alcuni sempi d’interazione con le reti di test come “ Rinkeby” e/o “ Ropsten” ed il Wallet Metamask. Nel terzo capitolo, ma forse non ultimo capitolo, vedremo come le aziende che gia sviluppano le dApp di oggi, usano le stesse tecnologie viste precedentemente, ed introdurremo alcuni dei progetti più interessanti del momento con un’occhio di riguardo verso alcune piattaforme quali Ethereum+Infura+IPFS.

Originally published at https://etherevolution.eu on June 8, 2020.

--

--

Lorenzo Disilvestro

Linux System Integrator Architect / BTCPay Server Italian community member | I transform business initiatives into sustainable blockchain technology solution