Tempo di lettura: 4 minuti

Chiunque abbia mai comprato delle cryptovalute è venuto a contatto con un Exchange. Molto presto potrebbe non esistere più alcun Exchange, grazie alla creazione degli Atomic Swaps!

Exchange, qual è la loro funzione

Un exchange è un servizio online che serve per effettuare le conversioni di valuta: vuoi comprare dei Litecoin con i tuoi Bitcoin? Al giorno d’oggi devi usare un Exchange che richiede una fee, una tassa sulla transizione. Gli sviluppatori di blockchain e cryptovalute come il team di Altcoin.io stanno studiando un sistema per sostituire la funzione dell’exchange: l’Atomic Swap!

Come funzionano gli Atomic Swap

La funzione di un Atomic Swap è quindi una transazione cross-chain, in quanto utilizza le blockchain delle due diverse cryptovalute. Fondamentale per la comprensione degli Atomic Swap è inoltre il concetto di Lightning Network. Immaginate due utenti, che per tradizione chiameremo Alice e Bob. Alice possiede 1 Bitcoin, Bob 94 Litecoin. Alice però vuole convertire il suo Bitcoin in Litecoin, mentre Bob ansioso di investire prima della fork di Bitcoin Gold desidera un Bitcoin! Entrambi i sistemi usano la propria blockchain, serverà quindi creare un canale di pagamento tra le due chains, una Lightning Network! Uno dei problemi principali che sono nati durante il primo sviluppo degli Atomic Swap è stato ovviamente la sicurezza della transazione, per evitare che Bob o Alice riescano ad effettuare lo scambio prima di aver inviato le proprie cryptovalute!

Cos’è un HTLCs

Per risolvere il problema sicurezza è nato un nuovo tipo di smart contract:

hash time-locked contracts (HTLCS).

Gli Exchange ricoprono un terzo ruolo, durante una transazione tra due soggetti: il ruolo imparziale che verifica la correttezza delle due parti. Un HTLCs ricopre proprio questo ruolo: attraverso hashlocks e timelocks sarà possibile concedere ad un utente di riscuotere un pagamento entra un certo limite di tempo solo dopo aver fornito un certificato crittografato del pagamento, o annullare la transazione in caso di mancato pagamento!

Storia degli Atomic Swaps

Uno dei maggiori esponenti degli Atomic Swaps è sicuramente Charlie Lee, fondatore di Litecoin, che ha condiviso il 22 Settembre 2017 il primo Atomic Swap tra LTC e BTC di cui potete trovare le due transazioni qui e qui.

Il 19 Settembre 2017 è stato completato il primo Atomic Swap tra Decred e Litecoin

Il futuro degli Atomic Swap

Sono molte le aspettative da parte della comunità verso gli Atomic Swap. Oltre alla sostituzione di Exchange gli Atomic Swaps potrebbero avere un’importante utilizzo nel mercato reale: un negoziante potrà infatti possedere per esempio un unico wallet bitcoin, accettando pagamenti in Litecoin e altre valute! Gli Atomic Swap potrebbero accelerare la diffusione delle cryptovalute come moneta reale? Gli esperti sembrano esserne sicuri: minori fee, tempi di transazione più veloci e soprattutto utilizzo di differenti cryptovalute tra cliente e venditore! Di seguito potrai trovare una dimostrazione di Atomic Swap usato per pagare la lettura di un articolo, davvero impressionante.

Un Atomic Swap Ethereum in Solidity

Analizziamo ora il codice di un Atomic Swap per Ethereum, realizzato dalla startup Altcoin Exchange, che potete trovare a questo indirizzo!

Dopo aver dichiarato il nome del contratto (AtomicSwap) con il costrutto contract, viene dichiarata una variabile di tipo enum che descrive i possibili stati di un attore all’interno di uno swap: Empty, Initiator e Partecipant.
All’interno del contratto è presente una struttura (struct) chiamata Swap, che contiene le informazioni fondamentali per lo smart contract:

  • initTimestamp: momento esatto in cui il contratto è stato creato
  • refundTime: tempo di durata dell’atomic swap
  • secret: valore random generato dall’inizializzatore
  • hashedSecret: hash della variabile secret, utilizzato dall’inizializzatore e dal partecipante per firmare la transazione. L’inizializzatore userà successivamente secret per effettuare l’unlock o riscatto  della transazione. In questo processo il valore secret verrà rivelato al partecipante, per sbloccare la transazione dell’inizializzatore.
  • initiator: indirizzo dell’inizializzatore, creatore del contract
  • partecipant: partecipante del contract
  • value: valore del contract, il valore dello swap
  • emptied: stato
  • state: enum dichiarato sopra

Terminata la parte di dichiarazione degli attributi possiamo notare il costruttore del contratto. Ricorda che Solidity permette solamente un costruttore, niente overloading!

All’interno di questo smart contract è possibile studiare un altro costrutto molto importante: gli events! Le quattro funzioni che trovate di seguito hanno la keyword event nella definizione della funzione, ma a cosa servono? La documentazione di Solidity definisce gli Events come un aiuto per il logging, da usare in modo simile a una callback Javascript. La particolarità delle funzioni Events è la gestione degli argomenti, che verranno salvati nel log della transazione, una speciale struttura dati nella blockchain.

Dopo i quattro Events troviamo le funzioni modifier. Nella documentazione di solidity troviamo modifiers nella sezione common patterns nella sezione Restricting Access. Una funzione modifier è una funzione che viene chiamata da un’altra funzione. Una funzione modifier conterrà molto probabilmente uno o più costrutti require, seguiti da un _ (underscore). Se la condizione all’interno di require dovesse verificarsi, il corpo della funzione chiamante la funzione modifier verrà eseguito nel punto in cui presente l’underscore. Di seguito un esempio:

Le funzioni modifier che troviamo nel  codice sono

  • isRefundable: controlla se l’attuale swap possa essere rimborsabile o no, assicurandosi che il timestamp del blocco attuale sia minore del timestamp dello swap sommato al tempo disponibile per lo swap.
  • isRedeemable: controlla se l’attuale swap possa essere dichiarato redimibile, controllando l’attributo secret dopo averne calcolato l’hash in formato RIPEMD-160
  • isInitiator: controlla il ruolo del mittente del messaggio
  • isNotInitated: controlla lo stato della proposta di swap

Troviamo ora la funzione initiate, marcata dalla keyword payable. Payable (qui la documentazione) deve essere usata nelle funzioni in cui si intendere far ricevere una transazione al contract. I parametri da passare sono il tempo disponibile per lo swap, hashedSecret e l’indirizzo del partecipante. La funzione verrà eseguita solamente nel caso in cui lo swap non sia stato già inizializzato, per poi dopo assegnare tutti i parametri formali passati alla funzione. Puoi trovare anche la chiamata alla funzione Initiated, event function di cui abbiamo parlato prima.

La funzione partecipate, che riceve la durata dello swap, l’hash del valore segreto e l’indirizzo dell’inizializzatore, serve per prendere parte allo swap: è infatti presente la keyword payable e il modifier isNotInitiated, a cui segue la chiamata alla event function Partecited. Arriviamo ora alla funzione più importante: redeem! Quando l’Atomic Swap sarà pronto verrà chiamata proprio questa funzione, che dopo aver verificato il ruolo dell’utente nello swap effettuerà le transazioni attraverso il metodo transfer, appartenente alla classe Address, che accetta come parametro il valore della transazione. Arriviamo ora all’ultima funzione, refundable! Si tratta della funzione di “rimborso”: con un controllo sul ruolo dell’attore verrà effettuata la transazione, cambiando lo stato dello Swap su Empty!

L’analisi del codice è finita, se hai domande non esitare a commentare! Se sei interessato ti consiglio di visitare altcoin.io, qui il repository GitHub dell’Atomic Swap. Il team di AltcoinExchange spera di finire i lavori in circa 2 anni, sperando di lanciare il servizio con tutte le features nel Q1 2018. Non ci resta che aspettare e assistere allo sviluppo degli Atomic Swap, una della evoluzioni più importanti nel mondo delle criptovalute!

Riccardo Masutti
Autore

Sono uno startupper, ethical hacker e consulente di Blockchain/Bitcoin e Digital Marketing. Mi considero una persona intraprendente e molto determinata, faccio del learning transfer il mio punto di forza e questo spiega il perchè sono sempre interessato nelle nuove tecnologie ed innovazioni. Ho una mentalità Open-Source oriented, amo la crittografia e tengo molto alla sicurezza, sia relativa a Bitcoin ma non solo… Bitcoin user and miner since 2011.

5 Comments

  1. Avatar

    Articolo eccellente complimenti.
    Avrei una domanda, quello che non mi é chiaro se ad esempio vogli cambiare 0,2354 bitcoin in altra moneta devo necessariamente aspettare ho trovare quacuno che sia interessato a scambiare l’intero importo o lo cosa viene gestita in automatico ed io sono sicuro che ad ogni mia domanda incontro una relativa offerta in maniera rapida? Grazie.

  2. Avatar

    …. volevo dire , l’intero ed esatto corrispondente importo da me richiesto.

Scrivi un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.