Bancor Protocol è un protocollo open-source per la determinazone automatica dei
prezzi e che permette il funzionamento di un meccanismo autonomo di liquidità, il
14In programmazione, un callback (o, in italiano, richiamo) è, in genere, una funzione, o un "blocco
di codice" che viene passata come parametro ad un’altra funzione. In particolare, quando ci si riferisce alla callback richiamata da una funzione, la callback viene passata come argomento ad un parametro della funzione chiamante. In questo modo la funzione chiamante può realizzare un compito specifico (quello svolto dalla callback) che non è, molto spesso, noto al momento della scrittura del codice.
15In informatica, con il termine promise ci si riferisce a un particolare costrutto usato nella sincronizza-
zione dell’esecuzione dei programmi scritti con alcuni linguaggi di programmazione di tipo concorrente. Questo costrutto fa uso di una sorta di segnaposto, un oggetto che prende il posto di un valore che è in attesa di essere restituito da un’operazione asincrona. Su questo oggetto vengono definite delle operazioni da effettuare quando l’operazione asincrona sarà stata completata.
4.4. Mercati decentralizzati (DExs) utilizzati 97
quale consente di poter convertire costantemente i vari tokens presenti nel network,
ad un prezzo calcolato tramite un algoritmo. Bancor non permette lo scambio peer-to-
peer fra gli utenti della piattaforma, ma piuttosto permette agli utenti di convertire i
propri fondi in tokens che comunicano direttamente con lo smart contract di Bancor,
con la possibilità di convertirli a loro volta in altri token in ogni momento con un
prezzo calcolato istantaneamente [40]. Lo smart contract monitora le riserve disponibili
di tokens e funge da controparte per ogni trade. Il contratto di Bancor si occupa anche di aggiornare automaticamente le informazioni riguardanti i tokens, come il
prezzo e la quantità disponibile in tutto il network, basandosi su un algoritmo pubblico.
Nello specifico, Bancor permette ai suoi utenti di convertire ether o tokens ERC-20 in
altri tokens utilizzando il meccanismo degli Smart Tokens: questi particolari tokens
sono convertibili in altri tokens del network ad un prezzo calcolato algoritmicamente
utilizzando le riseve di tokens disponibili [41].
L’algoritmo permette di prevenire la manipolazione dei prezzi e dei volumi, pratica
comune nei tradizionali sistemi di matching degli ordini [42]. Dalla prospettiva degli
utenti, scambiare un asset con uno smart contract è funzionalmente uguale a scambiare
un asset con un altro utente. Uno Smart Token permette, ad esempio, di convertire
il token base di Bancor (BNT) con qualsiasi altro token denetuto dallo smart token (utilizzeremo ETH per l’esempio). L’utente dovrà semplicemente inviare BNT (o ETH)
allo smart contract e riceverà ETH (o BNT) ad un tasso di conversione che permette allo
Smart Token di mantenere un rapporto predeterminato fra le riserve dei due tokens
coinvolti nello scambio. Nel caso in cui lo smart token sia configurato per mantenere un
rapporto del 10% BNT:ETH, quando gli utenti spediranno dei BNT allo smart contract
per ottenere in cambio degli ETH, il prezzo di BNT in termini di ETH verrà aggiustato
dinamicamente per mantere questo rapporto fra le due pool di liquidità.
Per un’analisi più approfondita di Bancor Protocol, del suo ecosistema e dei suoi
4.4.2 Uniswap
Uniswap è un protocollo open-source per lo scambio automatizzato di token su
Ethereum. È stato progettato attorno ad una serie di principi base:
• facilità d’utilizzo;
• efficienza in termini di costo del gas (costo delle commissioni).
Tale protocollo può essere utilizzato sia da trader, per scambiare tokens, che da smart
contracts, per automatizzare delle operazioni che necessitano una fonte di liquidità
on-chain, come per l’arbitraggio.
Gli smart contracts di Uniswap contengono riserve di liquidità di vari token e
le negoziazioni sono eseguite direttamente contro queste riserve. I prezzi vengono
determinati automaticamente utilizzando il cosiddetto meccanismo del constant market
maker (x × y = k) [43], che mantiene le riserve complessive di tokens in un equilibrio relativo; le riserve vengono formate inizialmente da una rete di fornitori di liquidità che
forniscono tokens al sistema in cambio di una quota proporzionale delle commissioni sulle transazioni.
Una caratteristica importante di Uniswap è l’utilizzo di un contratto intermedio (factory/registry contract), il quale implementa uno smart contract separato per ciascun token ERC20. Questi contratti contengono contengono le riserve di ETH e del relativo token ERC20. Ciò consente di scambiare le due valute sulla base dell’offerta relativa disponibile. I vari smart contract specifici sono collegati fra di loro tramite il contratto
intermedio, consentendo scambi diretti tra ERC20 e ERC20 o tra qualsiasi altro token
che utilizza ETH come un intermediario [43].
4.4.3 EtherDelta
EtherDelta è un DEx che permette ai suoi utenti di scambiare token ERC20, utilizzan-
4.4. Mercati decentralizzati (DExs) utilizzati 99
"tradizionale" che permette la visualizzazione dei migliori 500 ordini di acquito e di
vendita per ogni asset quotato, ordinati per prezzo e dimensione.
Gli utenti interagiscono con EtherDelta sia come maker che come taker; i primi
inseriscono limit orders per comprare o vendere un token specificandone sia il prezzo
che la quantità, con la possibiltà di stabilire anche una scadenza temporale per l’ordine,
dopo la quale esso verrà cancellato. Quando un maker firma e inserisce una transazione
nella piattaforma, l’ordine viene aggiunto nell’orderbook di EtherDelta, ospitato in uno dei server centralizzati e pubblicamente visibile nel sito web della piattaforma. Per
quanto riguarda i takers invece, non fanno altro che eseguire gli ordini già esistenti nel
orderbook selezionandone uno fra i primi 500 ordini inseriti dai makers. Attualmente,
EtherDelta non supporta gli ordini a mercato.
La piattaforma in sé, infatti, non performa il matching degli ordini; invece, i takers
devono selezionare degli ordini specifici presenti nell’ordebook; una volta individuato
l’ordine desiderato, la piattaforma invia sia l’ordine maker che l’ordine taker allo smart
contract di EtherDelta per la loro validazione e la conseguente esecuzione, per poi essere
inseriti nella blockchain Ethereum. Una volta ottenuta la conferma di questo inserimen- to, che avviene on-chain, l’orderbook di EtherDelta viene aggiornato; i tokens relativi
all’operazione appena conclusa fra il maker e il taker vengono trasferiti direttamente