Mercati e ordini
Un mercato ZooBC è un order book per una coppia di asset, conservato e abbinato dalla catena stessa. Ogni nodo applica le stesse regole di abbinamento quando viene applicata una transazione di ordine, quindi ogni nodo arriva alle stesse esecuzioni, nessun operatore custodisce i fondi dei trader e nessuno può riordinare il book. Chiunque può aprire un mercato, e un mercato attivo si paga il proprio canone.
Aprire un mercato
Un mercato è una coppia (base, quotazione): per esempio un token, l'asset base, prezzato in ZBC, l'asset di quotazione. La coppia è ordinata, quindi (A, B) e (B, A) sono due mercati diversi. Entrambi gli asset devono avere 8 decimali (vedi decimali e passo).
CreateMarket (tipo 21) costa market_creation_cost, 50 ZBC su mainnet. Questo costo diventa il deposito per il canone del mercato (vedi sotto).
Piazzare un ordine
Un PlaceOrder (tipo 22) indica il mercato, un lato (acquisto o vendita), un prezzo limite, una quantità, dei flag e una scadenza facoltativa. I flag possono renderlo un ordine a mercato (immediate-or-cancel) o post-only.
I prezzi sono espressi in unità atomiche di quotazione per unità atomica di base, moltiplicate per 10⁸. Un prezzo di 1,015 ZBC per token si scrive quindi 101.500.000.
Quando un blocco applica l'ordine:
- L'ordine trattiene ciò che può spendere: un ordine di vendita trattiene la sua quantità di base; un ordine di acquisto trattiene quantità × prezzo ÷ 10⁸ dell'asset di quotazione.
- Viene abbinato subito agli ordini già presenti nel book sull'altro lato, prima il prezzo migliore e, a parità di prezzo, prima l'id di transazione più basso. Ogni esecuzione avviene al prezzo dell'ordine già presente nel book, non al limite del taker.
- Ciò che non viene eseguito resta nel book, tranne che per un ordine a mercato, il cui residuo viene rimborsato.
Ogni prodotto viene arrotondato per difetto in aritmetica a 128 bit, quindi ogni nodo calcola esattamente le stesse esecuzioni.
Due regole mantengono puliti gli order book: il valore di quotazione di un ordine deve essere di almeno 2.500.000 unità atomiche (0,025 dell'asset di quotazione), e un taker non viene mai abbinato a un proprio ordine già presente nel book.
La commissione taker
Solo il taker paga una commissione di scambio: exchange_taker_fee_bps, 10 punti base (0,1 %) su mainnet, prelevata dall'asset che il taker riceve (la base per un acquisto, la quotazione per una vendita) e pagata al produttore del blocco. Nell'esempio sopra, 0,3 dei 300 token ricevuti vanno al produttore. L'aliquota è un parametro della catena che può andare da 1 a 100 punti base. I maker non pagano alcuna commissione di scambio, e il creatore del mercato non riceve alcuna quota.
La commissione taker è distinta dalla commissione della transazione. Le commissioni di PlaceOrder e CancelOrder sono normali commissioni, che vanno alla lotteria coinbase. Quando il produttore del blocco non è ancora maturo (vedi maturità e guadagni), anche la sua commissione taker va alla lotteria coinbase.
Annullamento e scadenza
CancelOrder (tipo 23) permette al maker, e solo al maker, di ritirare un ordine presente nel book; ciò che resta della parte trattenuta torna indietro. Un ordine nel book con una scadenza scade all'inizio di un blocco, in base al timestamp del blocco precedente.
Il canone del mercato
Un mercato occupa lo stato della catena, quindi paga un canone come qualsiasi altra cosa che lo occupa:
- il costo di creazione di 50 ZBC è un deposito che prepaga 12 periodi di canone; ogni periodo di 172.800 blocchi (30 giorni) ne preleva un dodicesimo, circa 4,17 ZBC, verso il pool di longevità;
- ogni PlaceOrder e CancelOrder aggiunge al deposito il 20 % della propria commissione, oltre alla commissione, fino a un deposito di 24 periodi, così sono gli ordini stessi a mantenere finanziato un mercato attivo;
- un mercato che non riesce a pagare un periodo, o uno dei cui asset è scaduto, viene eliminato: i suoi ordini nel book vengono rimborsati ai rispettivi maker, il resto del deposito va al pool di longevità e la coppia può essere riaperta in seguito.
ZooBC non ha pool di automated market maker: ogni scambio avviene tra ordini piazzati da persone. Per uno scambio singolo tra due asset qualsiasi, compresi i token con meno di 8 decimali, vedi offerte di swap.