venerdì 13 agosto 2021

Come Funzionano I Dex (AMM-Automated Market Maker)

Riguardo come avvengono gli ordini limite sugli exchange ne avevamo già parlato qui: Come Leggere Un Order Book e La Depth Chart (Exchange Cripto), oggi parliamo degli AMM (Automated Market Maker) che sono sostanzialmente dei Dex (exchange decentralizzati). Il riferimento è ad Uniswap, 1inch, PancakeSwap, Open Ocean, Quickswap, Raydium, Zilswap, etc
In generale si tratta di servizi automatici, attivi 24 ore su 24, disposti a quotare sempre il prezzo tra due asset. Alcuni usano una formula semplice come Uniswap, mentre altri tipo Balancer utilizzano soluzioni più complicate. Usando un AMM, non solo puoi comprare e vendere, ma puoi anche fare da banco fornendo liquidità ad una pool diventando un market maker (ricevendo fee sugli scambi degli utenti).


FORMULA AMM
Un AMM si basa su una formula matematica per prezzare gli asset. Invece di usare un order book come gli exchange tradizionali (cioè setto un ordine di vendita o di acquisto e qualcuno compra o offre quel token), gli asset vengono quotati tramite un algoritmo. Questa formula può variare a seconda di ogni protocollo. Per esempio, Uniswap utilizza 

x * y= k

Dove x rappresenta la quantità di un token nel pool di liquidità e y la quantità dell'altro che verrà scambiato. Invece k è una costante fissa, quindi la liquidità totale del pool deve sempre rimanere la stessa. Sostanzialmente si tratta di un'iperbole.
K è una costante anche se continua a crescere a causa delle fee sulle trade. Se ipotizziamo che Cake ed Link abbiano lo stesso prezzo e li metto in una pool, avrò 50 e 50%. Ad esempio 10 Cake e 10 Link. Ovvero 1 Cake=1 Link. Se io voglio comprare da questo pool 1 Link, in cambio di 1 Cake, cosa succederà? Avremo una diminuzione di token Link ed un aumento di token Cake (11 Cake e 9 Link). Se all'inizio x/y=1 (10/10=1), in questo caso avrò 11/9=1.22 (cioè un Link varrà più di un Cake ed effettivamente io ho acquistato Link quindi il prezzo dovrebbe aumentare). Stessa cosa vale al contrario. Se avessi venduto 1 Link e comprato 1 Cake avrei avuto 9/11=0.81 (ovvero 1 Link vale meno di 1 Cake e non è più in rapporto 1:1).
Altri AMM utilizzano formule differenti per i casi d'uso specifici a cui si rivolgono. Il fattore comune tra tutte le piattaforme, però, è il fatto che determinano i prezzi algoritmicamente. 
Un altro meccanismo è quello di Curve che utilizza pool di stablecoin o comunque con asset senza impermanent loss (perchè i due asset hanno valore costante). Questo meccanismo abbassa anche lo slippage rispetto ai classici AMM. L'effetto negativo riguarda la perdita del peg di una delle stablecoin che porterebbe uno slippage elevatissimo. Come si può vedere nell'immagine sopra, il grafico di Curve assomiglia al lato di un ottagono e mostra una curva di legame unica e permette di acquistare senza subire lo slippage. Se si nota invece la l'iperbole di Uniswap si vede che man mano viene acquistato il prezzo di un token e più il prezzo sale, teoricamente all'infinito. La formula utilizzata da Curve, è quella di sotto, dove Xi è la quantità di stablecoin, Wi il peso normalizzato. Curve ha poi combinato due invarianti con lo scalare S per ottenere un invariante che tenga conto delle proprietà delle stablecoin (ovvero non variare di prezzo). Se manteniamo C costante otteniamo una funzione che è equivalente al prodotto costante invariante (quando S =0) e che si avvicina alla somma costante invariante quando S tende all'infinito. A differenza di Uniswap o Balancer, Curve non cerca di mantenere i valori degli asset sempre uguali o proporzionali tra loro (cioè bilanciati). Ciò consente a Curve di concentrare la liquidità vicino al prezzo ideale (in un rapporto 1:1) per avere liquidità dove è più necessaria.
Balancer ha un meccanismo molto più complesso per prezzare gli asset e per depositi e prelievi. Tutti gli AMM utilizzano un algoritmo per gestire la liquidità, ma tradizionalmente gli AMM utilizzano una formula di prodotto costante che limita i pool di liquidità a due attività con un rapporto 50 e 50. Ad esempio, in un pool di liquidità di Dai ed ETH, man mano che si verificano operazioni che disturbano l'equilibrio DAI to ETH, il contratto del pool faciliterà le operazioni di contro-bilanciamento, riportando il rapporto 50 e 50.
Ciò che rende Balancer diverso è che i suoi pool intelligenti utilizzano una formula media costante, che consente più di due risorse e pesi al di fuori del 50 e 50. I pool di bilanciamento sono in grado di includere fino a 8 token di qualsiasi quantità. La formula della media costante consente anche strutture tariffarie adattive che possono reagire alle forze di mercato come la volatilità e la domanda. 
Per saperne di più: Balancer Whitepaper (Math)


COME AVVENGONO GLI SCAMBI
Anche un AMM presenta coppie di Trading, ad esempio, BNB/BUSD. Tuttavia, non è necessario avere una controparte (un altro trader) dal lato opposto per effettuare l'operazione. Al suo posto, interagisci con uno smart contract (ecco perchè prima di qualsiasi operazione eseguo uno o più smart contract). Su un exchange decentralizzato, le operazioni avvengono direttamente tra wallet degli utenti. Se vendi BNB per BUSD su Binance, c'è qualcun altro dalla parte opposta della negoziazione che compra BNB con BUSD (transazione peer-to-peer: P2P). Invece, gli AMM sono peer-to-contract (P2C). Qui le operazioni avvengono tra utenti e smart contract. Dato che non esiste un order book, su un AMM non troverai alcun tipo di ordine limite (anche se 1inch su Ethereum ha qualcosa di simile). Il prezzo di un asset che vuoi comprare o vendere è determinato da una certa formula. 


CHI FORNISCE LA LIQUIDITA'?
Ma se è tutto decentralizzato, la liquidità che compro o vendo, da dove salta fuori? La liquidità nello smart contract viene fornita dagli utenti stessi chiamati fornitori di liquidità (LP) che hanno incentivi a fare ciò. I fornitori di liquidità aggiungono fondi ai pool (utilizzati per negoziare e fare scambi). Come ricompensa per la liquidità fornita al protocollo, gli LP ricevono rewards dalle operazioni che avvengono nel loro pool (commissioni di trade) ed altre dal liquidity mining (di solito il token della piattaforma stessa). Ad esempio posso fornire liquidità nel pool di BTC/USDC: mettendo 50% e 50% (e riceverò commissioni su queste trade e in più il token della piattaforma dove sto fornendo liquidità). Esistono pure pool con 3 o 4 asset (tipo su Curve) o con % diverse (tipo su Balancer).


SLIPPAGE
A causa del funzionamento degli AMM, più liquidità è presente nel pool, meno sarà il potenziale slippage su grandi ordini. A sua volta, questo potrebbe attirare maggiori volumi sulla piattaforma. I problemi di slippage variano a seconda della struttura adottata dagli AMM, ma è senza dubbio un fattore da tenere in considerazione. 
Semplificando le cose, il prezzo è determinato da come cambia il rapporto tra i token nel pool di liquidità dopo un'operazione. Se il rapporto cambia in modo significativo, lo slippage sarà considerevole.
Qui puoi approfondire su un problema che capita spesso sugli AMM: "Insufficient Output Amount" Su Pancake/Uniswap? Ecco Come Risolvere


POSSO COMPRARE TUTTI I TOKEN DI UN POOL?
Ipotizziamo un pool BNB/BUSD, potrei svuotare tutti i BNB presenti nel pool? No.
In primo luogo dovremmo pagare un prezzo esponenzialmente più alto per tutti i vari BNB comprati, ma non riusciremmo comunque a comprare l'intera quantità presente nel pool. Perché? A causa della formula x * y = k.
Se x o y  scendono a zero, quindi ci sono zero BNB o BUSD nel pool, l'equazione non ha più senso.


IMPERMANENT LOSS
E' un fattore che abbiamo già trattato altrove ma va sempre ricordato.
L'Impermanent Loss avviene quando il rapporto di prezzo dei token depositati (come LP) cambia di molto dopo averli depositati nel pool. Più grande è il cambiamento, maggiore sarà la perdita. È per questo che gli AMM funzionano al meglio con coppie di token con valori simili, come le stablecoin (USDT/DAI o USDC/BUSD, etc) o i Wrapped token (BTC/WBTC o ETH/WETH, etc Puoi approfondire qui: A Che Servono Wrapped Bitcoin, Wrapped Ether e BTCB Sulla BSC?). Se il rapporto di prezzo della coppia rimane in un range relativamente piccolo di variazione, questa perdita è comunque trascurabile (a fronte dell'APY ricevuto per aver fornito liquidità).
Invece, se il rapporto subisce variazioni notevole, i fornitori di liquidità potrebbero guadagnare maggiormente conservando semplicemente i token nel proprio wallet, piuttosto che aggiungere fondi ad un pool. Ovviamente le perdite sono momentanee sino a quando non prelevo. Se i miei due token iniziano a convergere come all'inizio (erano 50 e 50%, ad esempio 1000 e 1000$), la perdita si annulla. Se invece prelevo quando la divergenza è elevata (a causa di grosse variazioni di prezzo dei due token sia verso l'alto che verso il basso), la perdita diviene permanente.


RUG PULLS
Oltre ad eventuali bug degli smart contract, uno dei problemi più grandi di questi dex e in generale dei pools di liquidità sono i Rug Pulls.
Sostanzialmente creo un token con supply di 1.000.000.000, vado a creare una coppia di scambio su PancakeSwap ed inserisco tutti i miei token più 10 BNB (così facendo sto settando anche il prezzo di acquisto del mio token, visto che tutti quei token valgono 10 BNB). Faccio un po' di pubblicità e la gente compra alcuni dei miei token. Ipotizziamo che rimangano 500.000.000 di token e 30 BNB vengano aggiunti al pool grazie agli acquisti del token. Io creatore del token posso usare i miei token LP svuotando il pool di liquidità e guadagnando 20 BNB rendendo tutti i token immessi sul mercato senza valore (poiché non c'è più liquidità con cui scambiarli. Il pool si riequilibria 50 e 50 e va a 0).
I token LP di chi ha fornito liquidità dovrebbero avere un blocco temporale di terze parti o essere bruciati. L'opzione di blocco temporale credo sia la migliore perché offre al team di sviluppo la possibilità in futuro di spostare la liquidità su un altro protocollo proteggendo anche gli utenti.
Se io immetto il mio token in coppia con BNB ed inserisco 100,000 dollari di liquidità (50,000 del mio token e 50,000 di BNB), anche con un acquisto di 10,000 dollari il mio token farà a grandi linee un rialzo di circa il 20% (va considerato però che meno liquidità immetto e maggiore sarà lo slippage rendendo difficoltosi gli acquisti).
Altri metodi di truffa sono i classici "Pump & Dump", in cui il team di sviluppatori, e talvolta loro amici e colleghi, otterranno una parte iniziale della supply del token, o almeno avranno la possibilità di acquistarli ad un costo molto basso.
Dopo che tutte le allocazioni iniziali sono state distribuite, il resto dei token viene aggiunto ad un pool di liquidità e il team inizierà a pubblicizzare e convincere le persone ad acquistare i token affinchè aumenti rapidamente il prezzo. Una volta che tutti i primi holders inizieranno a fare soldi, questi cominciano a vendere le loro posizioni, facendo crollare il valore.
Un buon modo per proteggersi da questa truffa è guardare l'elenco degli holders e vedere quanti wallet stanno detenendo grandi posizioni. Le persone che detengono il 2% o più, potrebbero facilmente far crollare il prezzo vendendo le loro posizioni, quindi cerca quanti ce ne sono e se hanno acquistato i loro token dalla coppia di scambio o se gli sono stati assegnati dall'account del deployer.
È anche importante tenere conto degli indirizzi di eventuale Burn. Alcuni dev conieranno una quantità eccezionalmente ampia di token e ne bruceranno la maggior parte, per nascondere l'effettiva % di offerta circolante che detengono i grandi portafogli. Se vedi un indirizzo dedito al burn che contiene una porzione significativa di un token premined, devi chiederti perché? Se i dev volevano una quantità inferiore di token, perché non usarne direttamente di meno?
Un'altra tecnica è la modifica di codice dello smart contract, settando l'impossibilità a chiunque di poter vendere i token, tranne che a sè stesso (sostanzialmente i token possono essere comprati e non venduti). Oppure diranno che devi pagare un importo X per sbloccare la possibilità di vendere i token. 
Una grande bandiera rossa è quando il progetto non rilascia il codice sorgente per lo smart contract (o se è rilasciato su Github, magari viene eseguito in modo diverso sulla blockchain. Se non viene convalidato su  blockchain explorer, molto probabilmente è diverso da come dovrebbe essere).
Per eseguire dei checks sui token, puoi andare a quest'articolo: Riconoscere Scam e Rug Pulls Di Token (Smart Contract)


Altri articoli:

Nessun commento:

Posta un commento