Sharding e blockchain

Sharding e blockchain

Il management and employee buyout (MEBO)
11 Maggio 2022
Un tratto di personalità: attento alle regole
18 Maggio 2022

Una delle tecniche di gestione del database che sta prendendo vita nella comunità crittografica odierna è lo sharding. Si tratta di un processo di frammentazione o divisione orizzontale delle banche dati in parti o frammenti più piccoli. Questo per consentirne una migliore movimentazione, rendendoli meno pesanti e più facili da manovrare. 

Lo sharding è stato creato per consentire una maggiore scalabilità nei sistemi distribuiti e decentralizzati ma, al momento, la sua applicazione nella tecnologia blockchain potrebbe migliorare notevolmente i problemi di scalabilità affrontati da reti come Bitcoin ed Ethereum. 

Vantaggi dell’implementazione dello sharding

Il vantaggio principale che offre la frammentazione per una blockchain è migliorare la scalabilità poiché le transazioni possono essere elaborate e convalidate più velocemente, riducendo la quantità di tempo necessaria per questo processo. La rete avrà quindi la capacità di elaborare un numero maggiore di transazioni al secondo. 

Allo stesso modo, l’implementazione dello sharding riduce il rischio di centralizzazione delle reti. Attualmente, le blockchain di Bitcoin ed Ethereum richiedono l’uso di apparecchiature con una grande potenza di calcolo per essere in grado di supportare tutte le informazioni che vengono gestite in queste reti. Dato che tali apparecchiature hanno costi di acquisizione elevati, non molti utenti hanno la possibilità di acquistarle. 

Con l’implementazione dello sharding non sarà più necessario archiviare l’intera blockchain nello stesso nodo, quindi non sarà richiesto l’acquisto di costose apparecchiature. Ciò consente a molte più persone di avere la possibilità di partecipare alla rete con le proprie apparecchiature convenzionali, garantendone il decentramento. 

Lo sharding è sicuramente la soluzione di ridimensionamento di Ethereum più complessa ed anche quella che dovrebbe essere rilasciata per ultima nella roadmap, dando così agli sviluppatori il tempo necessario sia per esaminarlo completamente sia per testarlo in ambienti di produzione continua. 

È importante conoscere il ruolo che i nodi giocano nella rete di Ethereum. I nodi sono responsabili della verifica del lavoro dei miner ed assicurano che le regole di consenso siano seguite. Il modo migliore per farlo è conservare una copia completa del libro mastro Ethereum, in questo modo è facile verificare il lavoro di un minatore. Ma la blockchain di Ethereum si sta avvicinando ad 1 terabyte di spazio di archiviazione, quindi non è pratico per un soggetto eseguire un intero nodo. 

Se i nodi Ethereum diventano troppo costosi da eseguire, la rete sarà più suscettibile alla centralizzazione. Allo stesso tempo, richiedere che ogni transazione venga elaborata da ogni nodo renderà Ethereum non scalabile. Lo sharding è una potenziale soluzione a questo problema. 

Lo sharding è diverso sia dai sistemi di state-channel che dalla soluzione cosiddetta plasma in quanto rispetto ad essi non sta tentando di spostare le transazioni al di fuori della blockchain (off-chain). Quello che sharding sta facendo è tentare di suddividere la blockchain in più parti in modo che i nodi non siano responsabili dell’elaborazione di ogni transazione trasmessa sulla rete Ethereum.  

All’interno di uno shard (frammento), i nodi vengono selezionati in modo casuale per votare periodicamente sulla validità dei blocchi, pensiamo ai minatori in una normale blockchain. Questi voti vengono quindi esaminati da un comitato sulla catena principale di Ethereum e uniti tramite quello che viene chiamato un contratto di gestione dello sharding. Questi blocchi di shards sono concatenati assieme con la stessa modalità utilizzata per i blocchi di una blockchain. 

Ogni frammento è legato alla catena principale di Ethereum sotto forma di Alberi di Merkle, creando una connessione crittografica tra i due. Ogni frammento funge da blockchain autonoma. Gli utenti di ogni shard hanno i propri saldi dell’account lontano dalla rete principale di Ethereum e possono effettuare transazioni solo con altri utenti dello stesso shard. 

Un modo semplice per pensarci è immaginare se Ethereum fosse diviso in migliaia di isole. Ogni isola può svolgere le proprie attività, può avere le sue caratteristiche e chiunque appartenga a quell’isola può godersela. Se si vorrà contattare altre isole, bisognerà utilizzare una sorta di protocollo dedicato a tale scopo. Questo è ciò che consente lo Sharding in una blockchain, ossia creare un modo per ogni frammento di memorizzare le singole ricevute di ogni transazione che, essendo crittograficamente sicure, possono essere riportate alla catena principale in qualsiasi momento lo si desideri. 

Sharding nelle reti blockchain

Il crescente boom commerciale sperimentato da criptovalute come Bitcoin ed Ethereum ha causato un problema di scalabilità nelle loro reti. Oggi sono molti gli utenti che desiderano effettuare transazioni con Bitcoin o usare applicazioni decentralizzate di Ethereum. Ciò comporta che siano richiesti molti nodi per la convalida e la verifica di tutti questi processi. 

I nodi di queste reti funzionano in modo tale che ognuno di loro deve memorizzare una copia esatta dei propri blockchain con tutti i dati in esso contenuti dall’inizio. Inoltre, le blockchain devono essere costantemente e permanentemente aggiornate man mano che vengono create e aggiunte ulteriori informazioni. Pertanto, le velocità di transazione sono seriamente compromesse raggiungendo il punto in cui le reti possono collassare e richiedere molto tempo per elaborare una transazione. Ciò non è opportuno per la sostenibilità a lungo termine e per l’adozione di questa tecnologia. 

Pertanto, sebbene questa metodologia e struttura di lavoro forniscano alla blockchain un elevato livello di sicurezza e protezione, determina anche la limitazione della scalabilità di queste reti rendendo le sue blockchain incapaci di elaborare più informazioni di quelle che ciascuno dei suoi nodi può elaborare individualmente.  

Sebbene oggi la rete Bitcoin, ad esempio, impieghi apparecchiature con grande potenza computazionale, il problema della scalabilità è ancora presente. Quindi la rete Bitcoin non può elaborare più di 5 o 7 transazioni al secondo. Sebbene Ethereum abbia una capacità maggiore rispetto a Bitcoin, ha ancora un problema di scalabilità che gli impedisce di superare in media 10 o 15 transazioni al secondo. 

Pertanto, l’implementazione di sharding può rappresentare quella soluzione praticabile e fattibile che elimina i problemi di scalabilità, e permette l’elaborazione di un maggior numero di transazioni in minor tempo, in modo sicuro ed efficiente. 

La mancanza di scalabilità, ossia la caratteristica di elaborare solamente poche transazioni al secondo, è un importante freno all’adozione di massa della tecnologia blockchain. Con sole 7 transazioni al secondo (tps) per Bitcoin e 15 transazioni al secondo per Ethereum, le soluzioni blockchain esistenti non sono competitive rispetto alle controparti centralizzate quali Visa (come sistema di pagamento) ed AWS (come servizio di cloud computing). Ad esempio, con la crescente popolarità di CryptoKitties nel 2017, è stata rallentata in modo particolarmente vistoso tutta la rete di Ethereum a causa di poche migliaia di utenti dell’app di collezionabili. Questa è certamente una preoccupazione per quelle aziende che utilizzano Ethereum allo scopo di alimentare i propri servizi. 

Attualmente, tutti i computer che gestiscono la rete Bitcoin ed Ethereum stanno lavorando sullo stesso registro pubblico. In altre parole, ogni nodo deve elaborare ogni singola transazione. L’aggiunta di più computer alla rete migliora solo la sicurezza, ma non l’efficienza. A questo punto sorge il cosiddetto trilemma blockchain ossia che nessuna delle blockchain può attualmente raggiungere al contempo scalabilità, sicurezza e decentralizzazione. 

Bitcoin ed Ethereum sono reti di sicurezza che provengono da Proof-of-Work. Centinaia di migliaia di computer e macchine specializzate nell’estrazione mineraria in tutto il mondo elaborano transazioni. In quanto sistema P2P / computer mondiale, Bitcoin ed Ethereum sono entrambi sicuri e decentralizzati. Tuttavia, non sono immediatamente scalabili. Per migliorare la scalabilità, sono state suggerite molte soluzioni. Ad esempio, BitcoinCash (fork di Bitcoin) ha aumentato la dimensione del blocco per consentire l’elaborazione di più transazioni in ogni blocco, mentre Lightning Network (secondo livello) ha utilizzato canali di pagamento off-chain per ridurre il carico sulla catena principale. Quindi Sharding è uno degli approcci più popolari nello sviluppo di diversi progetti blockchain tra i quali spicca Ethereum. 

Lo sharding è decisamente più facile da implementare su una catena del tipo proof-of-stake piuttosto che su una catena proof-of-work. Questo perché ci sono già validatori attivi all’interno della proof-of-stake che possono essere assegnati casualmente a diversi shard, mentre nei meccanismi proof of work non si può impedire concretamente ad un minatore di fornire il proprio potere di hash verso un particolare frammento. Se i miners conoscono il frammento che stanno convalidando, potrebbero potenzialmente provare ad orchestrare una collusione dannosa per il singolo shard. 

Molti sistemi privati utilizzano già lo sharding come soluzione per il proprio business, come ad esempio la distribuzione orizzontalmente del carico di un database o di un motore di ricerca. Va detto però, che implementarlo in una blockchain pubblica è ancora una sfida irrisolta, poiché la natura del decentramento e della trasparenza presenti in una blockchain rende difficile garantire altresì la sicurezza. È indubbio che in caso di successo, lo sharding ridurrebbe notevolmente i costi di transazione e consentirebbe agli sviluppatori di creare dApp più sofisticate ed utili.  

Come sharding migliorerà la scalabilità nelle reti blockchain

Lo sharding consente la frammentazione di un database completo in parti piccole, molto più gestibili e organizzate. Ad esempio, se viene gestito un database informativo di un intero paese o regione, con tutti i dati dei suoi abitanti, come località, provincia di residenza, indirizzo esatto dell’immobile, indirizzo di lavoro, data di nascita, età, quantità di bambini, reddito… in questo database sarà molto più difficile trovare o aggiornare informazioni specifiche. A causa della grande quantità di dati gestiti all’interno dello stesso elenco, diventerà più pesante e molto più lento nel funzionamento. 

Se invece quel database di grandi dimensioni è suddiviso in blocchi più piccoli e specifici, le informazioni saranno molto più gestibili ed efficienti poiché ogni frammento tratterà informazioni chiare e precise sul suo contenuto indipendentemente da ciò che viene gestito in altri sottoelenchi, diventando più leggero e più organizzato. 

Con la frammentazione, non sarà più necessario che tutti i nodi della blockchain funzionino in modo lineare per convalidare tutti i dati aggiunti alla catena.  

Piuttosto, funzioneranno in parallelo e gestiranno Shard, ossia frammenti specifici, in cui verranno distribuite le informazioni e questi frammenti avranno il compito di convalidare ed elaborare solo i dati a loro corrispondenti. Quando tutti i gruppi di nodi finiranno di eseguire il processo a loro assegnato, tutte le informazioni verranno aggiunte alla blockchain, mantenendola integra e completa, con la differenza che i nodi non gestiranno le informazioni nella loro interezza come accade fino ad ora. 

L’applicazione del metodo sharding consentirà di elaborare le transazioni molto più velocemente, migliorando la scalabilità e l’efficienza della rete. 

Sharding nelle reti blockchain e sicurezza

Sebbene lo Sharding suoni alla grande in teoria, ci sono tutta una serie di potenziali vettori di attacco.  

L’implementazione del metodo di frammentazione sulla blockchain di Bitcoin o Ethereum potrebbe porre un problema di sicurezza e comunicazione sulla rete. Ciò è dovuto al fatto che i nodi, quando assegnati a un sottogruppo, non avrebbero comunicazione diretta con i nodi che appartengono agli altri sottogruppi. Risulta quindi necessaria la creazione e l’implementazione di mezzi di comunicazione e canali esterni che permettano ai nodi di comunicare tra loro. 

Allo stesso modo, garantire la sicurezza e la protezione di ciascuno dei sottogruppi è anche una sfida per questa nuova metodologia. Suddividendo i nodi in blocchi, la potenza di hashing di ciascun gruppo diminuirà notevolmente. Il che può essere un problema di sicurezza e consentire a un malintenzionato di eseguire un attacco più facilmente. Una situazione che mette a rischio la sicurezza e l’integrità delle informazioni. 

Tuttavia, i sottogruppi creati utilizzeranno lo stesso protocollo di consenso utilizzato all’interno della rete. Quindi ci saranno nodi completi che scaricano e combinano ciascuno dei processi eseguiti da ciascun gruppo di nodi al fine di formare e mantenere la blockchain completa e verificare in modo assoluto tutti i processi effettuati anche consentendo ai thin client di avere accesso a tutti i frammenti per la verifica delle operazioni. 

Uno dei maggiori problemi di sicurezza che una blockchain frammentata può affrontare è un attacco mirato all’acquisizione del singolo frammento. Ciò consente a un utente malintenzionato di controllare un sottogruppo della catena e quindi impedire, ad esempio, che questo sottogruppo possa eseguire la convalida delle informazioni come l’ottenimento delle firme corrispondenti. O in un altro caso, presenta transazioni non valide o fraudolente alla blockchain principale.  

Il cosiddetto attacco di acquisizione di un singolo frammento è detto 1% attack, poiché  per compromettere uno shard basta avere l’hash rate utile a compromettere esclusivamente quello specifico shard, anziché attaccare l’intera catena principale con il 51% della network hashrate complessiva. Single Shard Attack significa che i nodi dannosi stanno controllando uno shard e le transazioni possono essere modificate all’interno di esso. Per prevenire un attacco a frammento singolo, è importante impedire agli aggressori di concentrare il loro potere hash su quel singolo frammento. 

Il modo per assegnare i nodi in diversi frammenti è la chiave. Si suggerisce un campionamento casuale di validatori su ogni shard per la soluzione di sharding di Ethereum. Quindi una casualità sufficiente può garantire che i validatori non sappiano quale shard otterranno in anticipo. Inoltre, vengono richiesti i ⅔ di tutti i validatori su uno shard per confermare la legittimità di un blocco. Oltre a questo, la dimensione minima di un frammento dovrebbe essere limitata per ridurre la possibilità che nodi dannosi vengano appunto assegnati allo stesso frammento. In conclusione, con le strategie accennate, la sicurezza della rete non verrà sacrificata con contestuale miglioramento dell’efficienza. 

Attuali implementazioni di sharding

La frammentazione è un problema che è ancora in fase di sviluppo per alcune blockchain come Ethereum e Cardano. Gli sviluppatori di questi progetti stanno studiando come implementare questo metodo per ottimizzare le loro reti. Ma altre criptovalute come Zilliqa (ZIL) hanno già implementato sharding sulle loro blockchain. Ciò ha permesso loro di raggiungere un totale di 2.828 transazioni al secondo nelle reti di test. 

Un altro progetto interessante che ha dimostrato il potere dello sharding è Telegram Open Network (TON). Il suo sviluppo attuale, sebbene iniziale, ha già dimostrato che la blockchain TON fa uso dello sharding per garantire il massimo livello di scalabilità possibile. Tuttavia, a causa di problemi con la SEC, Telegram non è stato in grado di rendere pubblico il lancio della sua rete. Per questo motivo, possiamo accedere solo ai suoi strumenti di sviluppo e test. 

È interessante notare che la stessa situazione si applica a Facebook Libra, un progetto che, nonostante i suoi enormi problemi di privacy, è stato sorprendente a livello tecnico grazie all’utilizzo dello sharding nella sua rete di validatori. 

 Bibliografia: 

Condividi su:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

EnglishFrenchGermanItalianRussianSpanish