🇨🇿 Jak WingRiders tým buduje DEX na Cardanu

Decentralizované burzy jsou základem každého DeFi ekosystému. Ve spolupráci s týmem WingRiders jsme hovořili o tom, jak lze takovou burzu vytvořit na platformě Cardano. V tomto článku se podíváme na to, jak se aplikace na Cardano obecně budují a jakým výzvám čelí tým WingRiders. Je zajímavé sledovat, jaké možnosti má tým k dispozici a jaká rozhodnutí na úrovni designu byla učiněna.

Vývoj burz

Obchodování s digitálními aktivy stále dominují centralizované burzy (CEX). Ty drží kontrolu nad soukromými klíči, parametry burzovního obchodování, informacemi o uživatelích, bezpečnosti vkladů, poplatky a směnným poměrem. Tyto burzy nenabízejí bezpečný pasivní příjem pro vlastníky mincí nebo tokenů.

Tradiční centralizované burzy používají model tzv. knihy objednávek (order book). Obchodníci mohou zadávat své nákupní nebo prodejní příkazy a centrální subjekt (market maker) příkazy porovnává. Při párování nákupních a prodejních příkazů je třeba dodržovat určitou strategii párování. Jakmile je nalezena shoda, může být obchod mezi oběma účastníky realizován. Tohle je základní koncept výměny dvou aktiv mezi uživateli.

Burzy využívající knihu příkazů mohou nabízet dva typy příkazů. Tržní příkaz (market order) umožňuje uživateli prodat tokeny A za požadované množství tokenů B. Uživatel musí vzít v úvahu aktuální tržní hodnoty tokenů. Uživatel očekává, že tržní příkaz bude proveden téměř okamžitě. Druhým typem je limitní příkaz (limit order), kdy uživatel prodává tokeny A za požadované množství tokenů B, ale definuje přesnou cenu, za kterou má být obchod proveden. Limitní příkaz tak může čekat delší dobu, dokud se tržní podmínky nepřiblíží očekávání uživatele.

Decentralizované finance (DeFi) daly světu jiný pohled na obchodování a přináší prokazatelně lepší podmínky pro uživatele. Decentralizované burzy (DEXy) nabízejí non-custodial řešení, spravedlivé zacházení, nižší poplatky, anonymitu, globální dostupnost pro každého, decentralizované a automatizované zpracování příkazů a možnosti využití pasivního příjmu. Zcela zásadní novinkou je model automatizovaného tvůrce trhu (AMM - Automated Market Maker).

Burzy založené na modelu AMM poskytují automatizované obchodování s aktivy prostřednictvím decentralizovaného provádění chytrých kontraktů. Uživatelské požadavky na swap (výměnu tokenů) jsou prováděny zcela automaticky a není třeba spoléhat na důvěryhodnou třetí stranu. Model AMM využívá tzv. likvidity pooly. Likvidity pool si můžete představit jako soubor dvou druhů tokenů. Například kolekce tokenů A a jiná kolekce tokenů B tvoří jeden pool likvidity. AMM DEXy nevyžadují párování kupujícího a prodávajícího (žádné párování příkazů). Místo toho mohou uživatelé jednoduše vyměňovat své tokeny a aktiva pomocí poolů. Požadavky na výměnu tak mohou být splněny v podstatě okamžitě.

Algoritmy stanovují cenu tokenů na základě měnícího se poměru v likvidity poolech. Požadavek uživatele na swap je vždy směrován do daného poolu obsahujícího identické tokeny. Typická AMM burza má více poolů. Pokud například umožňuje obchodování s tokeny A, B a C, může mít 3 pooly s následujícími páry: A a B, A a C, B a C.

Aby bylo možné na AMM burze provádět obchody, je nutné mít v poolech dostatek tokenů. Jinými slovy, pooly potřebují dostatečnou likviditu. Držitelé tokenů mohou tuto likviditu poolům poskytnout a stát se tak tzv. poskytovateli likvidity (LP - Liquidity Provider). Poskytovatelé likvidity obvykle ukládají oba typy tokenů pro daný pool. To znamená, že například poskytovatel likvidity musí vložit mince ADA v hodnotě 100 USD a tokeny A rovněž v hodnotě 100 USD pro pool s párem ADA a tokenem A. Poskytovatelé likvidity jsou za poskytnutí tokenů odměňováni. Odměna je úměrná poskytnuté likviditě a je odváděna z poplatků za provedené obchody.

Jak vysvětluje člen týmu WingRiders, AMM je moderní přístup k obchodování v decentralizovaném světě a stal se novým standardem. Je to nejpohodlnější způsob výměny krypto-tokenů. S rostoucím přijetím kryptoměn můžeme očekávat, že uživatelé budou ve svých peněženkách běžně držet mnoho typů mincí a tokenů, včetně bitcoinů a etherea. Tyto tokeny budou mít určitou hodnotu a uživatelé na nich mohou vydělat, pokud je poskytnou AMM burze. Mezi obchodníky a poskytovateli likvidity tak vzniká úžasná symbióza, přičemž obě skupiny z existence služby profitují. Proto bude WingRiders DEX založena na modelu AMM.

Porozumění eUTXO a výzvy spojené s budováním dApps na platformě Cardano

Než se podíváme na některé detaily návrhu WingRiders, je důležité pochopit rozdíly mezi ekosystémem Cardano a Ethereum. Mnoho týmů se snažilo vzít DEX, který již běžel na Ethereu, a okopírovat jeho design, aby měly rychle vybudovaný DEX v ekosystému Cardano. Tyto týmy si brzy uvědomily, že je to špatná cesta a že je třeba o návrhu více přemýšlet.

Tým VacuumLabs zastřešuje vývoj WingRiders DEX. Tým má dlouholeté zkušenosti s ekosystémem Cardano a spolupracoval s týmem IOG. Tým se dokázal hned na začátku vyvarovat mnoha chyb a DEX navrhl správně hned na první pokus.

Vysvětleme si rozdíly mezi návrhy Cardano a Ethereum, abychom lépe pochopili problémy, kterým týmy čelí. Díky tomu pochopíte, proč nelze jen tak okopírovat koncept z ekosystému Ethereum.

Každá blockchainová síť se snaží dosáhnout síťového konsenzu ohledně změn vlastnictví mincí a tokenů. Jinými slovy, každý nový blok aktualizuje stav. V blockchainu průmyslu jsou rozšířeny dva způsoby práce s mincemi. Každý způsob má své výhody a nevýhody. Prvním je UTXO (Unspent Transaction Output), který využívá Bitcoin. Druhým je model založený na účtech, který využívá Ethereum, ale i další projekty jako Solana, Polkadot, Algorand atd. Tým IOG implementoval rozšířenou verzi UTXO nazvanou Extended UTXO (EUTXO). EUTXO usnadňuje používání chytrých kontraktů. V tomto článku budeme nadále používat termín UTXO, ale v kontextu Cardana se jedná o EUTXO.

Peněžní model Etherea (account-based model) je založený na účtech (balancích), jež jsou podobné bankovním účtům. Mince jsou uloženy na adresách blockchainu a představují aktuální zůstatky. Každá transakce zůstatky upravuje. Když uživatel pošle určitý počet mincí jinému uživateli, účet odesílatele se sníží a účet příjemce se zvýší. Jedná se o atomickou operaci.

Ethereum udržuje globální sdílený stav pro všechny účastníky. Každá nová transakce mění globální stav. Během každé jednotlivé změny je globální stav uzamčen. Je důležité si uvědomit, že transakce na sobě závisí a záleží na jejich pořadí v bloku. Výsledek transakcí nese vyšší míru nejistoty a není deterministický. Pro ověření bloku je nutné znát pořadí transakcí. Validace transakcí musí být prováděna postupně (sekvenčně). V důsledku toho je paralelizace velmi obtížná, protože každá transakce v novém bloku musí být ověřena v kontextu předchozích transakcí a provedených změn.

Změna globálního stavu je možná také prováděním chytrých kontraktů, které mohou měnit balance na účtech. Konstrukce Etherea má pro vývojáře aplikací tu výhodu, že se nemusí starat o souběžnost. Vývojáři mohou volně pracovat s uživatelskými účty a měnit balance. Protože je zajištěno, že se k zůstatkům přistupuje jednotlivě, je menší riziko, že dva agenti přistoupí ke stejnému zůstatku ve stejnou dobu. Návrh aplikace je tedy poměrně snadný. Nevýhodou je již zmíněná složitost paralelizace, časté selhání transakcí a nutnost platit poplatek i za transakce, které selžou. Kvůli pořadí transakcí navíc vzniká problém známý jako Miner Extractable Value (MEV).

EUTXO model Cardano platformy se výrazně liší od modelu Etherea založeného na účtech. UTXO si můžete představit jako bankovky. Pokud si svou fyzickou peněženku představíte jako adresu blockchainu, můžete v ní mít více UTXO (více bankovek). Pokud by uživatel chtěl zjistit celkový počet mincí na adrese, bylo by potřeba sečíst hodnotu všech UTXO. Utrácení UTXO funguje stejně jako u bankovek. Pokud má uživatelk UTXO v hodnotě 100 ADA a potřebuje zaplatit 20 ADA, pak 20 ADA opustí adresu (a přičte se na adresu příjemce) a 80 ADA se vrátí na adresu odesílatele. Výsledkem budou dvě UTXO (poplatky jsme zanedbali).

Z pohledu ledgeru (účetní knihy) má Cardano transakce vstupy a výstupy, kde vstupy jsou nevyčerpané výstupy z předchozích transakcí. Všimněte si, že stále hovoříme o UTXO. Aktiva jsou v ledgeru uložena ve formě nespotřebovaných výstupech, nikoli na účtech (zůstatcích). Nezapomeňte, že každý UTXO může být spotřebován pouze jednou a pouze jako celek.

Ověřování transakcí je v síti Cardano mnohem jednodušší. V modelu UTXO je důležitý pouze lokální stav. To znamená, že výsledek transakce závisí pouze na použití UTXO, což jsou neměnné objekty na jedno použití, které fungují jako vstup a výstup transakcí. Transakce jsou tedy na sobě nezávislé a neexistuje nic jako globální stav.

Velkou výhodou je, že platnost transakce lze zkontrolovat mimo ledger ještě před odesláním transakce do blockchainu. Pokud transakce projde lokální validací (např. v peněžence uživatele), je vysoká pravděpodobnost, že se podaří validace i na úrovni ledgeru a transakce se dostane do bloku. Uzel by v zásadě mohl validovat transakce paralelně, pokud se tyto transakce nesnaží spotřebovat stejný vstup.

Vysoká úroveň determinismu a možnosti paralelizace jsou výhodami Cardano architektury. Na druhou stranu, jak vysvětluje člen týmu WingRiders, vývojáři se musí se souběžností (concurrency) vypořádat sami. Každý UTXO může být spotřebován pouze jednou a musí být ověřen celou sítí. Technicky to znamená, že UTXO může být spotřebováno jednou v rámci daného bloku. Transakce se mohou dostat do konfliktu, pokud jsou závislé na stejném UTXO ve stejnou dobu. Pokud by některé prostředky byly uzamčeny inteligentním kontraktem, může s nimi uvnitř jednoho bloku interagovat pouze jeden agent. Jak vidíte, Cardano a Ethereum jsou dva zcela odlišné světy.

Zeptali jsme se týmu WingRiders, jaké mají možnosti pro vytvoření DEX a jak pracují s chytrými kontrakty na Cardanu.

Cardano je do jisté míry obdobou bitcoinové funkcionality pay-to-script hash, kdy je transakce ověřována skriptem. Na rozdíl od Bitcoinu lze v případě Cardana k EUTXO připojit další data (Datum). Datum jsou libovolná data podobná JSON formátu. Mince jsou reprezentovány trojicí: adresa, hodnota a volitelně Datum. Adresa může být odvozena z veřejného klíče nebo to může být adresa skriptu. V případě adresy skriptu lze UTXO utratit pouze v případě, že validace definovaná v přidruženém skriptu projde.

Cardano umožňuje psát programovou logiku ve dvou odlišných částech. Zaprvé existuje on-chain část, která umožňuje napsat validační skript. Skripty jsou validovány Cardano uzly, takže tato část zajišťuje záruky, které nabízejí tradiční chytré kontrakty. Zadruhé je to off-chain část, která umožňuje vytvářet obchodní logiku (business logic) pro sestavování transakcí v souladu s přidruženými on-chain skripty. On-chain i off-chain logiku lze napsat v jazyce Haskell. Vývojáři však mohou pro off-chain část použít jakýkoli jazyk.

On-chain a off-chain části na sobě nejsou nutně závislé a netvoří jeden celek. Skripty validátorů mohou být vytvořeny off-chain částmi aplikace a definovat podmínky kontraktu. UTXO tedy může být utraceno transakcí, která nemusí být nutně vytvořena off-chain částí aplikace. Pokud jsou podmínky validačního skriptu splněny, pak je UTXO utraceno. Jak vysvětluje člen týmu WingRiders, byznys logika by mohla být dokonce implementována jako součást softwarových peněženek nebo těsně spjata s peněženkami na front-endu.

Při provádění UTXO pracuje validační skript s Datum, Redeemer a kontextem, který zahrnuje údaje o transakcích. Jak jsme již řekli, Datum je připojen k UTXO. Redeemer je argument specifický pro uživatele, který je vložen do transakce, jež byla vytvořena za účelem utracení UTXO. Obecně může Redeemer sloužit k různým účelům. Lze jej chápat jako záměr uživatele (tvůrce transakce), jak utratit UTXO.

Jak navrhnout DEX

První DEXy se objevily na platformě Ethereum. Zpočátku byla likvidita na decentralizovaných burzách nízká. Pro klasické burzy s knihou objednávek to nebyla dobrá situace. Nakonec se stala populární myšlenka zavedení poolů likvidity. Peněžní model založený na balancích se k tomu dobře hodí, protože pooly likvidity mohou být v podstatě jen balance (adresy s balancemi). Ethereum umožňuje tyto zůstatky libovolně měnit v rámci bloku. Uniswap těží z úspěchu konceptu AMM.

Zeptali jsme se týmu WingRiders, jak navrhnout DEX na Cardanu a jaké výzvy museli překonat.

V Uniswapu aktéři interagují s poolem likvidity atomickou výměnou tokenů a aktualizací balancí v poolu likvidity. Tento jednoduchý design nelze zkopírovat a aplikovat na Cardano. Pool likvidity je v podstatě sdílený zdroj, protože se ho snaží využívat více obchodníků (traderů) současně. Pokud by byl pool likvidity v Cardanu reprezentován jako jediné UTXO (naivní způsob, jak vytvořit něco jako zůstatek Etherea), mohla by být v každém bloku provedena pouze jeden swap. Jakékoli další pokusy by selhaly. Po každém swapu by se muselo vytvořit nové UTXO poolu likvidity s aktualizovaným zůstatkem.

Jak provést swap v účetní knize založené na UTXO? Je třeba mít k dispozici sadu UTXO, ze které lze tokeny odebírat, a druhou sadu UTXO, do které lze tokeny vkládat. Swap by mohl být realizován tak, že jednotlivé transakce by spotřebovávaly UTXO z jedné sady a vkládaly UTXO na druhou stranu sady. Swap se realizuje prostřednictvím výměny vybraných UTXO. Uživatelé musí poskytnout UTXOs s jedním typem tokenu (který zůstane v poolu likvidity), aby obdrželi UTXOs s druhým typem tokenu.

Jak vidíme, v tomto bodě se setkáváme s výzvou pro tvůrce DEX na Cardanu. Musí vymyslet nějakou byznys logiku, která zajistí, že se jednotliví aktéři nebudou chtít pokusit v bloku použít stejné UTXO z poolu. To je složité, protože transakce jsou na sobě nezávislé. Bez nějaké koordinace nebo chytrého algoritmu se mohou uživatelé pokusit použít stejné UTXO, ale uspět může jen jeden. Cíl pro návrháře je zřejmý. Jak dosáhnout mnoha interakcí s jedním likvidity poolem různými uživateli v jednom bloku.

Člen týmu WingRiders pokračuje ve vysvětlování. V zásadě vidíme dvě strategie řešení souběhu v Cardanu: hrubou sílu (brute-force) a hromadné transakce (bulk transaction). Strategie brute-force má omezenou škálovatelnost a rozsah použití. S nárůstem transakcí napříč platformou by se problém souběžnosti stal extrémním úzkým hrdlem. Tým se rozhodl použít druhou strategii: hromadné transakce.

Strategie hromadných transakcí rozděluje interakci s chytrými smlouvami do dvou fází. V první fázi musí uživatel vytvořit požadavek na výměnu. Když uživatel podepíše transakci, UTXO jsou uzamčeny na adrese skriptu, včetně podmínek, za kterých lze UTXO utratit. Ve druhé fázi jsou na řadě batchers (batcher entitě se také obecně říká agent). Agenti vyhledávají vhodné UTXO požadavky, které chtějí komunikovat s konkrétním likvidity poolem za účelem provedení požadovaného swapu. Je nutné splnit podmínky pro utrácení UTXO. Agenti to provedou se všemi ostatními dostupnými požadavky na swap a vloží všechny swapy do jedné velké dávkové transakce (bulk transakce). Při vytváření dávkové transakce agenti vědí, jaké UTXO již byly použity. Mohou tak zajistit, aby konkrétní UTXO nebylo v rámci dávkové transakce použito dvakrát. Taková transakce by selhala, respektive by ji síť odmítla, protože jedno UTXO lze použít pouze jednou. Jakmile jsou dávkové transakce potvrzeny sítí, uživatelé si vyměnili své tokeny. Velkou výhodou je intuitivní rozhraní, protože si uživatelé při vytváření požadavků na swap mezi sebou vzájemně nekonkurují, což znamená, že odpadá problém se souběžností a samotný swap je rychlý.

V první fázi jsou rovněž definovány podmínky, za kterých lze swap zrušit. Uživatel nemůže nikdy přijít o prostředky uzamčené v kontraktu. Swap se buď uskuteční, nebo neuskuteční a uživatel dostane své prostředky zpět.

Batching model

Prozkoumejme batching model podrobněji. Nejprve musí uživatelé vytvořit požadavky na swap (obsahující UTXO), které musí být submitnuté do sítě, vložené do bloky a potvrzené. To může trvat přibližně 5-30 sekund. Za druhé, agenti mohou shromažďovat nové požadavky na swap (transakce), jakmile se objeví v ledgeru. Agenti vytvářejí velké dávkové transakcí a efektivně provádějí mnoho swapů najednou pomocí poolů likvidity.

Všimněte si, že off-chain část DEX aplikace je jakýkoli kód vytvářející DEX transakce. Uživatelé využívají off-chain kód při vytváření požadavků na swap. Agenti využívají off-chain kód při vytváření dávkových transakcí.

Dávkové transakce jsou rozsáhlé kvůli obsaženým skriptům a velkému počtu vstupů a výstupů. Cílem dávkovače je maximalizovat efektivitu a zahrnout co nejvíce požadavků na výměnu. Čím více požadavků může agent splnit v rámci jedné transakce, tím menší je zatížení blockchainu, nižší celkové poplatky a příjemnější uživatelský zážitek co do rychlosti.

Dávkové transakce musí být také submitnuté do sítě a ověřené. Potvrzení může trvat dalších 5-30 sekund. Celková pocitová doba od vytvoření požadavku na swap do okamžiku, kdy do peněženky dorazí vyměněné tokeny, může být 15-60 sekund, ale ve skutečnosti většinu z ní tvoří čekání na potvrzení. Cokoli nad tento čas může znamenat, že síť může být přetížená nebo že agenti sbírají méně požadavků, aby snížili přetížení blockchainu.

Stále je výzvou dobře navrhnout dávkovácí model. Pokud má DEX vysoký počet požadavků vůči jednomu poolu likvidity, je třeba dávkování mezi bloky sekvencovat. To pravděpodobně způsobí přetížení při interakci s jediným poolem likvidity a čekací doby na swap budou velmi dlouhé. Tyto problémy jsme mohli pozorovat v rámci běžících DEXů a na Twitteru se to hodně diskutovalo.

Podívejme se, co lze změnit a zlepšit. Velikost transakcí lze snížit. To problém zcela nevyřeší, ale umožní to vložit do bloku více transakcí. Podobně lze snížit i využití zdrojů chytrých smluv. Čím optimálnější je implementace pro inteligentní smlouvy, tím více transakcí se smart kontrakty může být do bloku vloženo.

Práce na optimalizacích je cílem každého vývojového týmu a DEX není výjimkou. Vzhledem k tomu, že objem může rychle narůstat, je velmi důležité mít dobře optimalizovanou implementaci. Naštěstí má tým WingRiders velmi zkušené vývojáře v jazyce Haskell. Zaměření na optimalizace je pro tým prioritou od začátku vývoje.

Mít více agentů a poolů likvidity je obvykle funkcí celkového počtu uživatelů. Populární DEX přitahuje více uživatelů. To znamená, že DEX je atraktivnější pro poskytovatele likvidity. Mít velký počet uživatelů umožňuje vytvořit více poolů likvidity se stejným párem. Požadavky na swap tak mohou být lépe rozděleny mezi pooly. Mít více agentů je obtížné. WingRiders je od základu postaven tak, aby poskytoval možnost každému uživateli stát se agentem. Je to složitý inženýrský problém, ale tým mu docela dobře rozumí a už jsme spustili zkušební verzi konceptu v prohlížeči.

Rychlost swapů

Rychlost swapů je pro uživatele velmi důležitým faktorem. Jednou z výhod WingRiders DEX bude rychlost swapů. Všimněte si, že vnímaná rychlost dApp závisí na mnoha faktorech, a to jak interních, tak externích. Abychom se v tom vyznali, rozebereme si to a poskládáme dohromady. Každá dApp běží v prostředí distribuované sítě a má své vlastní vlastnosti a funkce. Aplikace dApp neexistuje ve vakuu a paralelně může běžet mnoho dalších aplikací dApp. Aby mohly dAppy poskytovat uživatelům dobrý UX, využívají také infrastrukturu, která zrcadlí stav blockchainu, nebo dokonce provozují nějakou byznys logiku či proces. Infrastruktura také přináší zpoždění. To vše jsou vnější faktory.

Čas bloku je vlastnost blockchainu a je to vnější faktor. V současné době má Cardano nastaven čas bloku na 20 sekund. Rychlost swapu je částečně ovlivněna dobou bloku, ale existuje mnoho dalších parametrů, které mohou mít vliv na celkovou propustnost sítě (počet zpracovaných uživatelských požadavků). Pokud se transakce do bloku nevejdou, musí na zařazení čekat déle. Některé Cardano parametry jsou v současné době nastaveny konzervativně. Dalšími důležitými parametry ovlivňujícími rychlost dApp jsou velikost bloku, maximální limit velikosti transakce, paměťové jednotky Plutus skriptu na transakci atd.

Tým IOG již projevil ochotu tyto parametry zvýšit. Každou změnu parametrů tým pečlivě zvažuje a následně sleduje. Na základě výsledků pozorování jsou plánovány další aktualizace. Tým IOG se snaží v maximální možné míře vyhovět požadavkům uživatelů a vývojářů.

V době psaní článku může blok obsahovat přibližně 4 transakce maximální velikosti nebo asi 250 drobných transakcí. Ve skutečnosti se v blocích vyskytuje kombinace obojího. Jedná se zhruba o 12 - ~800 transakcí za minutu. Pokud by všechny transakce v bloku byly skriptové, zúžilo by se toto rozmezí na přibližně 12-72 transakcí za minutu u obecných dApps. Reálně by to u transakcí s většími skripty bylo kolem 20 dApp transakcí za minutu.

V typickém bloku může být několik velkých transakcí a větší počet menších. Při vyšším vytížení sítě je v ideálním případě obsazeno maximum místa v bloku. Pokud by v bloku bylo vždy hodně velkých (skriptových) transakcí a ty malé by neprošly, mohlo by to vést k většímu zahlcení.

Berte v úvahu, že tato čísla jsou mírně pesimistické aproximace, protože chytré kontrakty na Cardanu jsou stále v rané fázi. Bylo již navrženo mnoho vylepšení. Optimalizace lze provádět na straně vývoje dApps a tým WingRiders neustále vylepšuje návrh.

Počet zpracovávaných požadavků na swap závisí na velikosti transakcí, využití paměti a cpu chytrých kontraktů. Zde se projevují vnitřní faktory návrhu dApp, řešení souběhu a kompromisy.

Tým WingRiders provedl test na veřejné testovací síti Cardano. V 10 blocích agenti provedli 175 požadavků na swap. Pokud by se bloky vytvářely každých 20 sekund, výsledek by odpovídal přibližně 55 splněným požadavkům za minutu. To vše za přítomnosti dalších dApps během testování. Abychom to dali do nějakém kontextu, podle novějších čísel se Uniswap v3 blíží 20-40 operacím za minutu.

Na pořadí požadavků na swap záleží

Uživatelé zadávají své požadavky na swap v daném pořadí. Agenti jsou schopny tyto požadavky najít v ledgeru a splnit je. WingRiders uživatelům zaručuje, že agenti budou pořadí podaných swapů respektovat. Pořadí je vynucováno tak, aby byla zajištěna spravedlnost podle zásady “kdo dřív přijde, ten dřív mele”.

Od agentů se očekává, že spravedlivě najdou nejstarší požadavky na swapy pro daný likvidity pool. Jakmile jsou vybrány požadavky na swap při dodržení limitu velikosti transakce a jednotek pro provedení skriptu, je vytvořena dávková transakce. Všimněte si, že i v rámci těchto dávkových transakcí je rozhodující řazení. Představte si následující velmi jednoduchou dávkovou transakci, která obsahuje pouze 2 swapové příkazy:

  1. Alice vymění 10 000 000 BTC za ADA, což způsobí obrovský skluz (slippage).
  2. Brian vymění 10 ADA za BTC

Když Brian vymění svých 10 ADA poté, co byl splněn Aličin swap, získá díky skluzu způsobenému Alicí mnohem více BTC. Když se však Brianův swap uskuteční před Aličiným swapem, dostane mnohem méně, ale na Alici to nebude mít obrovský vliv. Všimněte si, jak je pořadí důležité s ohledem na spokojenost uživatelů a spravedlnost.

Pamatujete si, že v síti Cardano neexistuje nic jako globální stav a na pořadí transakcí nezáleží? Stejně tak to platí i pro schopnosti chytrých kontraktů. Vývojáři to musí zohlednit při návrhu logiky aplikací.

Tvůrce transakce (transaction builder - off-chain část implementovaná v kódu agenta) zná pořadí, v jakém je třeba výměny provést. Ale i když dávkovač zná správné pořadí, situace není tak jednoduchá. Z podstaty věci, podobně jako u transakcí v bloku, nemá pořadí vstupů v transakci žádný konkrétní význam.

Aby bylo možné dodržet návrh WingRideru a zajistit slibovanou spravedlnost, musí existovat mechanismus, který spravuje správné pořadí vstupů. K jeho zajištění se používají indexy vložené do Redeemer. Vložení daného vstupu v transakci na první místo nestačí a vstupy jsou seřazeny do jiného pořadí před tím než může být transakce načtena validátorem. To znamená, že bez dodatečných indexů v Redeemerech nemůže validátor vědět, který vstup (který požadavek) má provést jako první a který jako druhý.

Tvůrce transakce tedy vloží vstup Alice do transakce jako první a přiřadí redeemer na index 0. Tím signalizuje, že má být proveden jako první. Analogicky by byl Brianově inteligentní smlouvě redeemer nastaven na index 1. Indexy pomáhají validátoru zjistit, který vstup transakce (požadavek na výměnu) má provést jako první a který jako druhý.

Bez popsané dodatečné logiky s indexy by validátory nebyly schopny zajistit, aby se požadavky na swap skutečně plnily ve správném pořadí. Abychom to vysvětlili jinými slovy, je nutné vytvořit dodatečnou logiku pro udržení požadovaného pořadí, protože Cardano to nemůže zajistit na úrovni transakcí a jejich vstupů.

Existuje důvod, proč chce WingRiders zajistit, aby byly všechny swapy splněny v pořadí, v jakém byly uživateli vytvořeny. Kromě férovosti je také nutné ověřit, zda byli všichni uživatelé správně odměněni. Pokud by tomu tak nebylo, validace by selhala. Tým nechce slevit z přesnosti výpočtů uvnitř chytrých smluv jen proto, že se smlouvy nemohou spoléhat na pořadí vstupů. Tým navrhl metodu, která agentům umožňuje zajistit pořadí i uvnitř transakcí.

Klíčem k úspěchu je síťový efekt

Každá služba potřebuje uživatele. Pro DEX je to obzvlášť důležité, protože čím vyšší je počet uživatelů a čím vyšší je likvidita, tím lepší je služba. WingRiders je AMM burza, takže potřebuje dva druhy uživatelů. Uživatele, kteří chtějí směňovat tokeny. Dále poskytovatele likvidity, kteří chtějí používat své mince nebo tokeny za účelem získání odměn. Uživatelé musí za swapy zaplatit a část vybraných poplatků se použije na odměny poskytovatelům likvidity. Tento ekonomický model je funkční, protože jsou uspokojeny zájmy dvou skupin uživatelů.

Uživatelské rozhraní a dostupnost služby jsou klíčové. V tom má WingRiders velkou výhodu díky svým rozsáhlým zkušenostem s projektem Cardano a jeho infrastrukturou. Cílem týmu je, aby se WingRiders stal základním prvkem infrastruktury. Toho bude dosaženo díky možnosti velmi snadné integrace do jakékoli peněženky nebo dApps. Tým to umí velmi dobře, protože v minulosti vytvořil populární peněženku Adalite a nyní pracuje na nové peněžence NuFi (stakingová platforma s plány na podporu 10 blockchainů). Tým také pracoval na integraci peněženek Cardano s peněženkami Trezor a Ledger HW. WingRiders bude velmi modulární a flexibilní software vhodný pro integraci. Jedná se o účinnou strategii, jak se přiblížit uživatelům a rozšířit síťový efekt.

Jak uspokojit uživatele

Každý tým musí pečlivě zvážit design aplikace, aby uživatelům nabídl atraktivní funkce.

Bezpečnost služby je naprosto klíčovou vlastností pro získání důvěry uživatelů. WingRiders nechá externí auditory (konkrétně CertiK) prozkoumat zdrojový kód, aby bylo zajištěno, že mince a tokeny zaslané na adresu burzy se nikdy neztratí. Uživatelé a poskytovatelé likvidity si tak mohou být jisti, že o své prostředky nepřijdou. Důraz na vysokou bezpečnost je v souladu s filozofií projektu Cardano a bezpečnostní audit je téměř nezbytnou podmínkou úspěchu.

WingRiders uživatelům slibuje, že swapy budou prováděny v kanonickém pořadí. Není důvod poskytovat výhody komukoli. Se všemi uživateli bude zacházeno stejně.

Tým pracuje na tom, aby byl DEX co nejvíce přístupný všem uživatelům. Poplatky jsou důležitou součástí rozhodování o použití. Díky optimalizacím se týmu daří snižovat výši poplatků za používání sítě Cardano. Tím se sníží poplatky pro koncové uživatele WingRiders.

Snadnost a přehlednost jsou dalšími důležitými požadavky na úspěch. Uživatelské rozhraní je pro tým jednou z priorit. Jak již bylo popsáno, bude velmi snadné integrovat WingRiders s peněženkami a dApps. To je vidět již na jejich testovací síťové verzi, kde je ukázána hluboká integrace do peněženky (NuFi).

Kromě možnosti odměny za poskytnutí likvidity do poolů se tým snaží zachovat možnost podílet se na stakingu mincí ADA a nepřijít tak o odměny.

Ekosystém Cardano se rychle vyvíjí a první verze burzy WingRiders nemusí být zcela optimální. Tým bude reflektovat vývoj infrastruktury Cardano a DEX podle toho upraví.

Závěr

Cílem článku nebylo porovnávat architekturu Cardano a Ethereum. Obě platformy se od sebe zásadně liší a najdou si své vlastní uplatnění. S týmem WingRiders jsme chtěli ukázat, jak složité a náročné je vytvořit DEX na síti Cardano. Ze světa Etherea nelze převzít téměř nic kromě základního konceptu a týmy musí přijít se zcela novými nápady.

WingRiders má silný a zkušený tým, který je dobře financován. DEX již běží na testovací síti a v hlavní síti Cardano se objeví v prvním čtvrtletí roku 2022. Určitě neváhejte a přijďte si vyzkoušet swap nebo poskytnout likviditu. Můžete se podívat na oficiální stránky projektu nebo si s týmem popovídat na Discordu.