Non esiste una tipologia di blockchain migliore o peggiore di un’altra, dipende dall’ambito di applicazione della medesima, per cui dal punto di vista progettuale l’ideale sarebbe avere una piattaforma di sviluppo che possa permettere lo sviluppo parallelo di diverse tipologie di blockchain contemporaneamente.
Un esempio è il progetto lanciato il 29 agosto 2019 Hyperledger Besu rinforza ulteriormente l’universo Hyperledger, permettendo l’utilizzo del sistema Ethereum e dei suoi punti di forza anche agli utilizzatori delle piattaforme Hyperledger prettamente chiuse e private (come Fabric), in modo tale da poter utilizzare la piattaforma migliore in funzione delle applicazioni e degli obiettivi ed i valori aggiunti che si vogliono raggiungere con l’implementazione di una Blockchain. Vediamo come funziona questa importante novità.
Il contesto
Il World Economic Forum classifica le blockchain come indicato dalla tabella seguente tratta dal “White Paper: Inclusive Deployment of Blockchain for Supply Chains: Part 1 – Introduction” pubblicato nel Marzo del 2019.
Se dal punto di vista delle blockchain cosidette “chiuse” Hyperledger Fabric si sta dimostrando un supporto professionale, flessibile ed esaustivo, dall’altro punto di vista delle blockchain “aperte” mancava uno strumento di sviluppo compatibile con l’universo Hyperledger. Il 29 agosto 2019 è una data che probabilmente sarà ricordata a lungo per il “mondo blockchain”, infatti è stato presentato l’ultimo progetto: Hyperledger Besu.
Che cos’è Hyperledger Besu
Hyperledger Besu rappresenta un client Ethereum completamente basato su Java, conosciuto in passato con il nome di Pantheon, il client sviluppato da PegaSys all’interno di ConsenSys, e che ora è a tutti gli effetti, membro della famiglia Hyperledger, come illustrato nella seguente infografica:
L’obiettivo del progetto Besu è stato quello di creare una nuova piattaforma per lo sviluppo e la distribuzione di progetti blockchain basati su Ethereum (linguaggio Solidity) compatibile con i linguaggi di sviluppo dell’universo Hyperledger (ad esempio Javascript, Java, ecc.). Hyperledger Besu è stato progettato per essere il più modulare possibile, con una netta separazione tra algoritmi di consenso e altre funzionalità chiave della blockchain, rendendo questi componenti facili da aggiornare o da implementare. La creazione di interfacce immediate e semplici all’interno del client (ad es. Networking, storage, EVM, ecc.) ha come scopo il favorire l’utilizzo business della piattaforma anche e soprattutto congiuntamente agli altri progetti Hyperledger in essere, come esempio Fabric.
Per la prima volta il sistema Hyperledger, orientato soprattutto verso un tipo di blockchain “privata”, ha la possibilità di utilizare anche i vantaggi della blockchain cosiddetta “pubblica”, utilizzando però, al posto del linguaggio solidity, lo specifico ed originale linguaggio di Ethereum, cioè un linguaggio più uniformato come Javascript.
Le caratteristiche tecniche
Hyperledger Besu è un client Ethereum Open Source, sviluppato sotto Apache 2.0, scritto interamente in un linguaggio largamente diffuso come Java. Può essere eseguito sulla rete pubblica Ethereum o su reti private autorizzate, nonché su reti di test come Rinkeby, Ropsten e Görli. Signifiicativo è anche il fatto che Hyperledger Besu include numerosi algoritmi di consenso tra cui PoW, PoA e IBFT e dispone di schemi di autorizzazione completi progettati specificamente per l’uso in un ambiente “consortile”.
Un client Ethereum è un software che implementa il protocollo Ethereum, ed essi sono formati da:
- un ambiente di esecuzione per l’elaborazione delle transazioni nella blockchain di Ethereum,
- un archivio per i dati permanenti relativi all’esecuzione delle transazioni,
- una rete peer-to-peer (P2P) per comunicare con gli altri nodi Ethereum sulla rete al fine di sincronizzarne lo stato,
- le API per gli sviluppatori di applicazioni al fine di farla interagire direttamente con la blockchain.
Le altre caratteristiche di Hyperledger Besu sono:
- Ethereum Virtual Machine (EVM), una macchina di Turing completa per l’esecuzione degli smart contracts attraverso transazioni in una blockchain su Ethereum;
- algoritmi di consenso che, in Besu, sono diversi a seconda delle necessità.
Questi sono:
- Proof of Authority (PoA): Besu implementa diversi protocolli PoA, che sono utilizzati quando i partecipanti alla blockchain si conoscono ed il livello di fiducia tra di loro è elevato (ad esempio: permissioned consortium), IBFT 2, Clique. Nel primo le transazioni e i blocchi sono convalidati da accounts approvati, noti come validatori, che a turno, creano il blocco successivo. I validatori esistenti propongono e votano per aggiungere o rimuovere altri validatori. Il secondo è un algoritmo più tollerante verso le defaillance rispetto IBFT 2.
- Proof of Work (PoW): il classico e noto algoritmo di Ethereum.
Hyperledger Besu per lo storage utilizza un RocksDB a chiavi per conservare localmente i dati, che si dividono in due sottocategorie:
- Blockchain, che contiene i block headers, i block bodies (transazioni ordinate) e le ricevute delle transazioni ed i transaction logs.
- World State, ogni block header ha un riferimento nel World State attraverso un stateRoot hash. World State è una mappatura dagli indirizzi agli accounts: gli account esterni contengono ether balance, mentre gli smart contracts contengono codice eseguibile.
Inoltre, implementa il protocollo di REthereum “devp2p” ed in aggiunta i sottoprotocolli per il funzionamento di IBFT2.0:
- Discovery: un protocollo basato su UDP (user datagram protocol).
- RLPx: protocollo basato su TCP con due sottoprotocolli: Ethereum Wire Protocol e IBF sub protocol per IBFT2.0.
- interfacce API (HTTP JSON-RPC, WebSocket JSON-RPC, GraphQL);
- strumenti per il Monitoraggio dei nodi e delle prestazioni del network: Prometheus, Alethio tools (Block Explorer e EthStats Network Monitor).
- per la gestione riferita al GDPR/Privacy ha la capacità di mantenere private le transazioni tra le parti coinvolte;
- consente la partecipazione solo di nodi e account specifici, Permissioning, abilitando l’autorizzazione del nodo e/o l’autorizzazione dell’account sulla rete.
Infine, un’altra significativa caratteristica di Besu, è che implementa le specifiche della Enterprise Ethereum Alliance (EEA) al fine di creare interfacce comuni e standardizzate fra i diversi progetti aperti e chiusi all’interno di Ethereum.
Cosa supporta Hyperledger Besu
Hyperledger Besu include un’interfaccia comando a linea tipo HTTP- WebSocket-based APIs per far girare, mantenere e monitorare I nodi in un network Ethereum. Le API di Besu supportano le tipiche funzionalità di Ethereum come ad esempio gli smart contract e lo sviluppo e distribuzione delle dApp (applicazioni decentralizzate) per i casi d’uso operativi (Truffle, Remix e web3j). Inoltre, Besu supporta anche le blockchain private, permissioned dei consorzi di network (tipo Fabric), ma non supporta la gestione delle chiavi all’interno del client per motivi di sicurezza.
È però possibile utilizzare “EthSigner”, o qualsiasi portafoglio compatibile con Ethereum, per gestire le chiavi private. EthSigner fornisce l’accesso al key-store e firma le transazioni tramite strumenti come Hashicorp Vault e Microsoft Azure. In Besu sono disponibili:
- la configurazione degli smart contract,
- la configurazione dei permessi dei nodi,
- le transazioni private sono possibili attraverso il metodo dello zero-knowledge nel client, incluso l’uso del protocollo Aztec.
Per un approccio off-chain è richiesto l’uso di Orion, un’applicazione open source per la gestione delle transazioni private, sviluppata separatamente da PegaSys.