Il problema:
Una blockchain è un database distribuito e decentralizzato che permette a chiunque di verificare in modo trasparente che quello che vi viene scritto non è stato modificato illegittimamente in nessun modo. Quindi questa tecnologia è perfetta per memorizzare contratti, atti di proprietà, operazioni finanziarie, senza il bisogno di un notaio umano o di una banca, in un modo completamente decentralizzato che rende impossibile ad ogni parte in causa il compiere atti illegittimi.
Il grande limite di questa tecnologia è che è abbastanza lenta e costosa. Infatti una transazione può richiedere molti minuti e alcuni dollari per essere eseguita dal sistema. Questo limite non è critico per grandi transazioni, per esempio quelle immobiliari, ma diventa inaccettabile per le situazioni con tante piccole transazioni, perché in quel caso il prezzo da pagare per usufruire della sicurezza della blockchain è superiore al valore della transazione stessa.
Quello che vorremmo è la possibilità di usufruire dell’elevatissimo livello di sicurezza offerto da Ethereum, ma in un modo veloce ed economico.
In questo articolo analizzeremo Polygon, una possibile soluzione per gestire questo problema presente nell’ecosistema di Ethereum nel caso d’uso in cui servano molte transazioni a prezzi bassi.
La possibile soluzione: Polygon
Polygon è una sidechain di Ethereum, questo significa che è una blockchain separata, simile a quella “parent”, capace di comunicare con Ethereum.
Quindi possiamo deployare il nostro contratto su Polygon, mantenere sia coin che nft in esso, e periodicamente Polygon riporterà le transazioni su Ethereum.
Dal punto di vista del programmatore Polygon è quasi identico ad Ethereum: i contratti si scrivono comunque in Solidity, si deployano con Truffle, si interagisce con essi usando Web3Js, quindi Polygon può inserirsi in qualunque ecosistema basato su Ethereum. Ma in che modo Polygon è diverso da Ethereum? Polygon è veloce ed economico (migliaia di volte più veloce ed economico di Ethereum). Questo è possibile grazie ad alcune differenze:
Proof of stake vs proof of work
Ethereum usa la “proof of work” per validare le transazioni, Polygon usa la “proof of stake”.
Entrambi sono meccanismi di consenso, ma sono diversi:
– Nella “Proof of Work” (POW) la validazione delle transazioni è fatta attraverso il mining: è un processo competitivo dove diversi users provano a validare (“minare”) un blocco di transazioni, e il primo che ci riesce è ricompensato con dei coins. La validazione in se, basata su hash, è molto semplice per un computer moderno, quindi per renderla un “work” il sistema fa in modo di rendere il processo più dispendioso. Di conseguenza l’atto del mining richiede molta potenza computazionale, per questo motivo è molto lento. È sicuro ma non “environmental friendly”.
– Nella “Proof of Stake” (POS) la validazione non è competitiva, il sistema seleziona degli utenti per validare i blocchi attraverso alcune regole legate allo “stake” che essi hanno nella blockchain. Lo stake in questo contesto è la quantità di coins che gli utenti sono pronti a “impegnare” per avere l’opportunità di essere selezionati come validatori. In questo sistema non c’è nessun ragione per rendere la validazione un lavoro, quindi può essere un processo economico e veloce.
Possiamo affermare che Polygon, che utilizza la proof of stake, ha lo stesso livello di sicurezza di Ethereum? Ci sono diverse opinioni riguardo al paragone deii livelli di sicurezza offerti da POW e POS, ma Polygon periodicamente trascrive alcune informazioni riguardo alle transazioni su Ethereum, quindi esiste una sorta di “double check” che garantisce che sia molto difficile manipolare le informazioni.
I checkpoints di Polygon su Ethereum
Polygon è una sidechain quindi periodicamente trascrive dei checkpoints (che sono informazioni sulle transazioni) sulla rete principale, in questo caso Ethereum, in modo da beneficiare della elevatissima sicurezza di Ethereum. Polygon non trascrive la totalità delle informazioni, perché sarebbe un processo lento e costoso, ma sono il risultato di una funzione di hash, ottenuto prendendo il root di un Merkle Tree dove le foglie sono le transazioni. Di conseguenza anche in caso di minimo cambiamento nelle transazioni il root cambierebbe completamente, e ognuno potrebbe accorgersi della manomissione facendo una semplice comparazione con il checkpoint su Ethereum.
Ecosistema Polygon
Dal punto di vista del programmatore i tools necessari per creare uno smart contract in Polygon e per interagire con esso sono gli stessi usati per Ethereum:
– Si scrive il contratto usando Solidity, che è un semplice linguaggio object-oriented altamente specializzato per l’implementazione di smart contracts. Nonostante questo linguaggio non abbia la quantità e la qualità di funzioni e librerie che ci si potrebbe aspettare da java o python esso è sufficiente per lavorare nel suo dominio. Da notare che Solidity e la sua documentazione sono stati scritti con Ethereum in mente, quindi impegnandosi per lavorare in un ambiente in cui la computazione è molto costosa, ma da questo punto di vista Polygon è molto più economico, e risulta molto meno necessario ottimizzare questi aspetti.
– Possiamo deployare il contratto usando il framework Truffle, che mira a gestire precisamente questo caso d’uso. Il processo è abbastanza elementare, abbiamo solo bisogno di un nodo da utilizzare per il deploy (può essere un nodo nostro oppure fornito da uno dei numerosi providers specializzati) e di un paio di comandi. Truffle permette inoltre di testare profondamente il contratto, sia attraverso unit tests scritti in Solidity che attraverso integration tests scritti in Javascript. In questo secondo caso Truffle può avviare automagicalmente una blockchain locale utilizzando Ganache e deployando al volo il contratto li per eseguire i tests, con un impegno minimo per il developer.
In questo caso è importante mettere una forte attenzione sull’importanza del testing: quando il contratto è deployato in produzione diventa molto complesso modificarlo mantenendo i dati. L’intero concetto di Blockchain è basato sul rendere il contratto immutabile quindi è critico deployarlo solo quando si è sicuri che non ci siano bugs.
– Quando siamo pronti a deployare il contratto su un ambiente esterno possiamo usare Mumbai, che è una testnet di Polygon gratuita. Qui possiamo verificare che tutto funzioni come atteso
– Esattamente come per Ethereum possiamo interagire col contratto usando Web3Js, non c’è bisogno di cambiare niente qui. Ci sono anche dei portings di questa libreria in Java e altri linguaggi.
Come procurarsi un Polygon node
Si può considerare di runnare un nodo su una macchina fisica oppure su una istanza EC2 di AWS, ma queste soluzioni sono abbastanza costose (per un nodo è necessaria una macchina molto performante). La soluzione più pragmatica è probabilmente quella di utilizzare providers come Infura, Geth, Quicknode etc quindi pagare una terza parte per mettere a disposizione un endpoint verso il quale è possibile effettuare le chiamate di web3js. È importante notare che questi providers provvedono ai nodi, ma dobbiamo comunque procurarci i coins necessari per pagare il gas.
Conclusioni:
Se si vuole usufruire della sicurezza di Ethereum ma al contempo avere transazioni molto economiche allora Polygon può essere una soluzione semplice ed efficacie, che permettere di riusare la knowledge base e i tools di Ethereum.