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).
“`
$ sudo yum install epel-release
$ sudo yum install nodejs npm -y
“`
Successivamente, avremo bisogno anche dell’installazione di Ganache CLI e Testrpc.
“`
$ sudo npm install -g ganache-cli
$ sudo npm install -g ethereumjs-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
HD Wallet
==================
Mnemonic: rotate laundry world soup pill verb meat dial tackle air poet rhythm
Base HD Path: m/44’/60’/0’/0/{account_index}
Gas Price
==================
20000000000
Gas Limit
==================
6721975
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)
Available Accounts
==================
(0) 0xC7dAcb4210c6611449782FDA0Fe9AB0eEfBD2e20 (~0 ETH)
(1) 0x7b1F26B500A8B3eC7cCC52e430fa5fFA28745f85 (~0 ETH)
Private Keys
==================
(0) 0x178b3f900059761ef82962b590173f7e9f9136745e6d93e581f77b8e9eca8396
(1) 0xbc102b779097cdb0c4b2253012da93ea881d139c62ea516cf9f56d89a00e7936
Gas Price
==================
20000000000
Gas Limit
==================
6721975
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!
instance: EthereumJS TestRPC/v2.10.2/ethereum-js
coinbase: 0xc7dacb4210c6611449782fda0fe9ab0eefbd2e20
at block: 0 (Tue May 26 2020 23:51:37 GMT+0200 (CEST))
modules: eth:1.0 evm:1.0 net:1.0 personal:1.0 rpc:1.0 web3:1.0
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.
Commenti