Ethereum

Consultare https://www.ethereum.org.

E' una piattaforma di applicazioni blockchain, diversamente dal Bitcoin il quale si occupava solo della transazione di moneta virtuale. Lo scopo è quindi quello di creare Applicazioni che sfruttano la struttura Blockchain.

Il linguaggio da utilizzare per gli Smart Contracts è Solidity, applicabile anche per altre tipologie di software (giochi, applicazioni in ambito finance, ecc...). Ehtereum è una piattaforma open-source per creare Applicazioni Distribuite Decentralizzate (dAPPs).

dAPPs: applicazioni create direttamente nell'"ecosistema" di Ethereum in cui tutti i partecipanti del network lavorano sulle Applicazioni decentralizzate e sono disponibili nel network. Viaggiano in modo condiviso, non c'è un download per esempio. Questo è quello che molti definiscono l'Internet 3.0.

All'interno del sistema Ethereum ci sono due cryptovalute:

  • Ether: cryptovaluta esterna della piattaforma Ethereum. Ogni attività che modifica lo stato del network di Ethereum ha un fee da pagare in Ether. I "miners" che contribuiscono alla registrazione delle transazioni nella blockchain vengono ricompensati in Ether. Ogni Ether vale 1*10^18 Wei, l'unità più piccola di Ether. Gli Ether posoono essere acquistati e scambiati come una valuta normale con altre valute reali o Bitcoin.
  • Gas: valuta interna del sistema. E convertibile solo in Ether. Il prezzo varia in modo opposto all'Ether. Una moneta pensata per gli sviluppatori del network. Visto che ogni azione ha un costo (il fee), il Gas compensa le fluttuazioni del prezzo dell'Ether mantenendo costante il costo dei fee.

Su https://ethgasstation.info si possono vedere le tariffe (tipo il costo dell'invocazione di una funzione, che è 0,46$) e la conversione tra le unità di Gas e di Ether.

Nodi del network di Ethereum

Ci sono due tipologie di nodi (computer) collegati su Ethereum:

  • Nodo EVM (Ethereum Virtual Machine): fornisce la struttura per eseguire il codice scritto nei SC esistenti, purché venga digerito prima dal compilatore di Solidity. Motore esecutivo del network di Ethereum.
  • Nodi Mining (Minatori): tengono aggiornato il Registro (Ledger), il cuore della blockchain. Compito dei Minatori è registrare le transazioni. I Minatori sono in competiizione fra di loro per risolvere un puzzle matematico attraverso il potere di calcolo del loro computer (fa forza la GPU). Chi risolve per primo il puzzle matematico guadagna il diritto di registrare la transazione e viene ricompensato con una frazione di Ether per il suo lavoro. Compiti dei Miners:
    • registrare transazione;
    • aggiornamento costante del Ledger e invio degli aggiornamenti a tutti i nodi del Network;
    • utilizzano il protocollo Proof-of-Work come protocollo di consenso;
    • guadagna soldi come ricompensa in frazioni di Ether, il guadagno dipende dalla potenza di calcolo che può mettere a disposizione del network, si guadagna qualcosa sfruttando un "Mining Pool", difficilmente si riesce individualmente.

Questa è una distinzione semplicemente di funzioni che un nodo può assumere all'interno del network Ethereum.

Account Ethereum

  • Externally Owned Accounts: account delle persone normali dotati di
    • "public key" anonima ma visibile a tutti (marchio identificativo dell'account);
    • "private key" personale, da non perdere, chiave di accesso.
  • Contract Account: account degli Smart Contracts che possiede solo l'identificativo (chiave publica) e non posseggono la chiave privata.
### Proof of Stake adopted by Ethereum From 10/8 2022, with the Merge, Ethereum has turned to Proof of Stake consensus protocol. https://it.investing.com/news/stock-market-news/la-fusione-di-ethereum-e-stata-un-successo-ma-ora-2089096

Go Ethereum (Geth)

E' una versione del linguaggi di programmazione Go struttura appositamente per Ethereum. E' un command line tool (CLI), concepito con finalità di implementazione dei nodi nella blockchain di Ethereum.

Si possono creare nodi Miners ed EVM da usare per la propria Blockchain privata.Il funzionamento di Geth si basa sul protocollo JSON RPC (IPC RPC).

Installazione Download da: https://ethereum.github.io/go-ethereum/downloads/

Durante l'installazione da wizard spuntare anche i Devloper Tools.

Completata l'installazione è utilizzabile da riga di comando o da Powershell.

Comandi Help:

geth -help

Per scaricare tutta la blockchain dal network globale di Ethereum, dal blocco genesi 0 al blocco attuale (50GB circa):

geth

Permette tre stategie di collegamento:

  • IPC
  • RPC (Remote Procedure Call)
  • WS (Web Socket)

Collegamento, quindi, del PC ad Ethereum:

geth

Ogni Network di Ethereum ha un ID di catena:

  • ChainID 1: Homestead public network
  • ChainID 2: Morden (non più in uso)
  • ChainID 3: Ropsten -> per connetterti usa il comando geth --testnet
  • ChainID 4: Rinkeby -> per connetterti usa il comando geth --rinkeby
  • ChainID sopra 4: per connetterti con i Private Networks

Creazione blockchain privata

genesis.json

Occorre scrivere un file di configurazione del network chiamato genesis.json.

Tra i vari avrà i seguenti parametri indicativi:

  • chainId: è maggiore di 4, identifica il network su cui si sta lavorando;
  • nonce: numero di transazioni contenute nel blocco;
  • parentHash: nel caso del Blocco 0 consiste in una serie di 0.

Inizializzazione network

Chaindata: perscorso dove conservare le informazioni relative alla blockchain.

geth init <<path file genesis.json>> --datadir <<path/chaindata>>

Abilitazione protocollo RPC

Geth usa di defaul il protocollo IPC, ma il protocollo RPC (che usa l'HTTP) è più maneggevole:

geth --datadir <<chaindata>> --rpc --rpcapi <<eth,web3,miner,admin,personal,net>> --rpccorsdomain <<*>> --nodiscover --networkid <id del network>
  • --rpc abilita il protocllo RPC
  • --rpcapi abilita le librerie da usare per la connessione
  • --network id

Connessione al network

IPC:

geth attach ipc:\\.\pip\geth.ipc

RPC:

geth attach rpc:http://localhost:8545
geth attach rpc:http://127.0.0.1:8545

Cambio porta con -rpcport.

Account

La blockchain è funzionante, ma non è ancora possibile avviare un'attività di mining poichè occorre un account Coinbase o Etherbase. Una volta connessi al network:

personal.newAccount()

Dopo aver inserito la password viene generato l'indirizzo dell'account Coinbase o Etherbase appena creato. Questo ID va conservato, non è più recuperabile successivamente.

Abilitare catena privata al Mining

miner.setEtherbase("codice indirizzo fornito alla creazione dell'account")

Se il response è "true", l'account è attivo.

Quindi:

eth.coinbase

Il response dovrebbe essere l'ID dell'account creato. Se tutto è regolare si può avviare l'attività di mining con:

miner.start()

e interromperla con:

miner.stop()

Completamento setup Ethereum

Ganache (test e collaudo transazioni nel network)

La scrittura di una transazione avvenuta nel network di Ethereum richiede alcuni passaggi:

  • creare la transazione;
  • inserimento in un pool in attesa di trascrizione;
  • richiamo della transazione da registrare;
  • registrazione della transazione.

Il processo di mining è quindi troppo time-consuming per lo sviluppatore di dAPPs.

Per questo motivo è stato concepito il tool Ganache-CLI, ossia un nodo fittizzio, surrogato, di Ethereum che contiene entrambe le funzionalità di processazione delle transazioni e mining, senza dover aspettare il tempo richiesto per una normale transazione.

Ganache-CLI è basato su node.js (installare node.js se non è stato fatto).

Per installare ganache-cli:

npm install -g ganache-cli

Dopo aver installato il tool si può avviare il nodo virtuale con l'istruzione:

ganache-cli

Ganache crea 10 account virtuali con 100 Ether virtuali ciscuno, mostando le 10 chiavi hash private (vedi immagine).

Compilatore Solidity

Necessario solo se si usa Solidity in locale, se si utilizza Remix non è necessario. Il codice Solidity deve essere convertito in bytecode per essere letto dalle EVM.

npm install -g solc

Libreria Javascript Web3

Web3 è stata concepita per connettere i nodi da Ethereum al proprio computer o da remoto. Può gestire le transazioni tramite i nodi di Ethereum.

Installazione:

npm install web3@0.19 (o versione più aggiornata stabile)

Si accede al workspace del nodo Ethereum:

node

Quindi per connettersi al nodo:

var Web = require("web3")
var web = new Web(new Web.providers.HttpProvider("http://localhost:8545"))

per verificare la connessione al nodo:

Web.isConnected()

Mist Wallet

Per effettuare scambi occore un portafoglio virtuale "Wallet". Mist è un wallet valido per gestire gli scambi di Ether su Ethereum. Scaricare Mist da qui: https://github.com/ethereum/mist/releases

Quando si lancia Mist il wallet trova in autonomia il network privato e si collega, altrimenti si collega automaticamente al network Main di Ethereum o a Rinkeby.

Con Mist è possibile:

  • inviare/ricevere Ether;
  • invocare funzioni all'interno degli Smart Contracts.
  • Installazione portafoglio virtuale portafoglio virtuale

Accedere a GitHub: https://github.com/ethereum/mist/releases.

Scaricato il sorgente da github, Geth comincierà ad estrarre.

Uso

Nella cartella dove sono stati installati i componenti di Geth c'è il programma Ethereum Wallet.

Eseguendolo si apre un'interfaccia (vedi screenshot) da cui è possibile fare un Add Account e vedere, in alto a destra, il saldo in Ether. Alla voce "Contract" si possono deployare e gestire gli Smart Contracts.

Creare l'account usando una password sicura da conservare.

Il Wallet salva dei file nel disco fisso. ATTENZIONE: fare backup frequenti per conservare questi file, contengono anche gli Ether.

Metamask

Estensione di Google Chrome per l'interazione con Ethereum.

Download: https://metamask.io

Non scarica tutta la blockchain sul computer ma si collega al network di Ethereum attraverso il browser.

  • Collegamento a tutti i network di Ethereum,
  • invio/ricezione di Ether (transazioni di Ether),
  • aggiunta su Chrome.

Installazione e uso

Aggiungere l'estensione da https://metamask.io.

Accedere registrando una nuova password.

L'account con il Wallet Mist è già presente su MetaMask, viene recuperato in automatico. Si può scegliere a qualsiasi network connettersi, compresi quelli privati (su localhost:8545).

Se si vuole espostare la chiave privata:

... -> Export Private Key -> Inserimento password

IMPORTANTE: salvarsi la chiave, è come un portafoglio fisico.

Previous Post Next Post