IOTA Delegate PoW [Italian]
INTRODUZIONE
Sono Spataro Fabrizio (fabryprog), sviluppatore J2EE con 12 anni di esperienza. Negli ultimi 2 anni sto dedicando i miei sforzi di apprendimento al settore blockchain e a tutto quello che gira intorno ad esso.Il mondo blockchain è vasto e trovare un progetto di riferimento è molto importante per capirne veramente le potenzialità. Da 6 mesi ho scelto il mio progetto: IOTA
IOTA è una DLT dedicata al mondo IoT ed è conosciuta soprattutto perchè non usa uno schema a blocchi (blockchain) ma un groviglio di transazioni chiamato tangle. Proprio per la natura del tangle, la rete IOTA non ha limiti di crescita, più grande è la rete più grande è la potenzialità.
Il progetto è opensource (github) ed è tutt'ora in via di sviluppo.
PROBLEMATICA
La rete peer2peer di IOTA è fatta da nodi con all'interno un'interfaccia REST API per interagire con essa.Le fasi di scrittura di una transazione IOTA (che è equiparabile ad un record del database) possono essere fatte localmente con chiamate singole al nodo che tra l'altro è l'unico che può salvare e trasmettere la transazione ai nodi vicini.
Una delle fasi più pesanti è la cosiddetta PoW (Proof of Work) che prevede l'esecuzione di un algoritmo CPU intensive (nota bene: il concetto di PoW su IOTA è molto differente dal concetto di altre DLT)
Abbiamo però indicato IOTA come progetto dedicato al mondo IoT ed è un fatto noto che un sensore/dispositivo IoT non disponga di una grossa potenza di calcolo oppure non può sprecare energia se l'autonomia è un fattore importante e vitale per la sua esistenza.
In questi casi quindi il task pesante PoW viene delegato ad uno dei nodi. L'algoritmo eseguito però richiede un utilizzo variabile della CPU tra 1 a 50 secondi. La variazione di tempo dipende da una variabile casuale oltre alla struttura hardware che si ha a disposizione.
Possiamo quindi ben capire che l'operazione di PoW è un problema non indifferente che occorre affrontare.
SOLUZIONE PROPOSTA
Il Delegate PoW non è una novità. Ho personalmente modificato il codice sorgente per permettere ai nodi di usufruire risorse aggiuntive esterne per il calcolo.
La mia idea principale è di utilizzare risorse comuni come PC e/o server per aiutare i nodi della rete IOTA ad essere più performante.
Per far questo ho utilizzato una libreria, chiamata Hazelcast, che permette l'esecuzione di task remoti su client collegati al cluster.
La modifica è stata quindi inserire due modalità di avvio distinte:
- abilitare il server a ricevere connessioni esterne
- avviare il worker
Quando viene chiesto al server di calcolare la PoW, il server delega il lavoro a tutti i worker collegati. Il primo che trova una soluzione la invia
Naturalmente, più worker sono collegati più il server ha una probabilità alta di incrementare le proprie prestazioni.
TEST
Il lavoro è stato iniziato il 1 Novembre 2018 ed è stato concluso qualche giorno fa. E' stato un lavoro divertente e prettamente notturno che mi ha fatto perdere un pò ore di sonno.Nella serata di Giovedì 22 Novembre, con l'aiuto dei ragazzi della community Telegram IOTA ITALIA e IOTA LAB [ITA] ho potuto dimostrare la bontà dell'idea e dell'implementazione.
Il server di riferimento è stato un VPS ospitato su Contabo con 4 CPU e 10 GB di RAM che riusciva a tenere una media di 3 transazioni per minuto (TPM)
I ragazzi della community hanno messo a disposizione ben 10 worker tra VPS notebook e desktop
Le prestazioni istantanee misurate con un tool appositamente scritto da un membro della comunità hanno dimostrato che il server è riuscito a delegare il PoW e raggiungere prestazioni medie di 18 TPM.
CONCLUSIONI
Concluso il lavoro sono felice di avere dimostrato prima di tutto la bontà dell'opensource e la grande collaborazione e professionalità che la community IOTA ITALIA ha costruito.
Il prossimo passo è delegare il PoW a risorse remote che possiedono GPU in grado di effettuare il calcolo mediamente 8 volte più veloce di una CPU.
Alla prossima
Commenti
Posta un commento