🇨🇿 Pochopení Cardano Mem-Poolu

Mem-pool je místo, kde transakce čekají na vložení do bloku. Každý uzel producenta bloků musí udržovat svůj mem-pool. Mít kontrolu nad mem-poolem je výhoda, kterou lze zneužít. V článku se dozvíte, k čemu mem-pool slouží. Vysvětlíme si, jak funguje front-running útok.

Co je Mem-Pool?

V distribuované síti neexistuje žádný centrální bod, který řídí výrobu bloků. V síti Cardano je přibližně každých 20 sekund náhodně zvolen jeden uzel (slot leader) a získá právo razit nový blok. Producenti bloků (nebo pooly) jsou umístěny po celém světě a nový pool lze spustit kdykoli a kdekoliv.

Když uživatel odešle transakci do sítě, musí dosáhnout všech poolů. Dopředu totiž není známo, který lídr slotu bude vylosován v příštím kole. V ideálním případě se transakce dostane do všech uzlů, takže existuje šance, že ji další vedoucí slotu vloží do nového bloku.

Uživatelé z celého světa v každém okamžiku zadávají transakce. Uzly ověřují transakce, ale to je to jediné, co s nimi v danou chvíli mohou dělat. Pokud jsou transakce platné, musí někde počkat, než se vloží do nového bloku.

Mem-pool slouží jako určitý druh čekárny pro transakce před jejich přidáním do ledgeru.

Mem-pool si můžete představit jako dočasnou paměť na každém uzlu, kde jsou transakce dočasně uloženy, než se dostanou do bloku. Jakmile se transakce dostanou do bloku, budou navždy uloženy v ledgeru (pokud nebude reorganizován blockchain).

Každý pool (uzel) může mít jiné složení mem-poolu, protože přijímají transakce v jiném pořadí.

Pokud Alice z Evropy, Bob z USA a Carol z Číny odešlou transakce ve stejnou dobu, uzly v různých částech světa obdrží transakce v jiném pořadí.

Na obrázku vidíte 3 uživatele, kteří zároveň odeslali transakci. Každý uživatel používal jiný uzel (protože například používal jinou lehkou peněženku). Každá transakce dosáhla nejbližšího uzlu, který ji vložil do svého mem-poolu. Uzly pak vysílají transakci mezi peery. V závislosti na kvalitě síťového připojení dorazí transakce k peerům v různém pořadí. Peer uzly ověřují transakce a vkládají je do mem-poolu, kde již čekají jiné transakce. Jak vidíte, každý mem-pool vypadá jinak. Všechny pooly obsahují všechny transakce, které byly odeslány, ale v jiném pořadí.

Pro jednoduchost nejsou na obrázku zobrazeny reléové uzly.

Transakce jsou dostupné v mem-poolu na všech uzlech, takže nezáleží na tom, který z nich se stane dalším lídrem slotu. Pokud se transakce vejdou do nového bloku, budou do něj vloženy všechny.

Na obrázku můžete vidět, že uzel 1 byl zvolen jako vedoucí slotu. Uzel 1 vezme všechny transakce z mem-poolu a vloží je do nového bloku. Uzel vyrazí nový blok a přidá jej do svého ledgeru. Uzel 1 vysílá blok na peery (uzel 2 a uzel 3). Peers o novém bloku ještě nevědí, takže transakce jsou stále v jejich mem-poolu.

Na obrázku můžete vidět, že uzel 2 a uzel 3 přijaly nový blok z uzlu 1. Uzly 2 a 3 blok ověřily a přidaly ho do svého ledgeru. Během tohoto procesu tyto uzly odstranily z mem-poolu ty transakce, které byly v novém bloku. Upozorňujeme, že uživatelé mezitím odeslali nové transakce. Transakce, které jsou již v hlavní knize, byly odstraněny ze všech mem-poolů. Mem-pool se však neustále plní novými transakcemi.

Na posledním obrázku mají všechny uzly stejný stav ledgeru, ale jiné pořadí transakcí v mem-poolech. V dalším kole bude zvolen nový vedoucí slotu a celý proces se bude opakovat.

Než je možné do bloku cokoli zapsat, musí se nejprve přesunout skrz mem-pool. Je to nedílná součást fungování blockchainového uzlu. Totéž, co se děje s transakcemi, platí také pro certifikáty (certifikáty o delegování, certifikáty o registraci poolu atd.). Při ověřování transakcí mohou být spouštěny skripty.

Mem-pool ukládá kandidátské transakce (v místní paměti) předtím, než jsou vloženy do nového bloku. Každý uzel se pokouší zůstat synchronizován s ostatními uzly v síti. Vzhledem k tomu, že síťová komunikace není vždy spolehlivá nebo včasná, má každý uzel mírně (nebo někdy výrazně) odlišný mem-pool. Uzly řadí transakce do fronty podle pořadí, ve kterém přicházejí.

Mem-pool funguje jako druh síťové vyrovnávací paměti. Pokud není možné vložit všechny transakce do nového bloku, mohou transakce čekat v mem-poolu. Ale jen do pevně stanoveného limitu. Velikost mem-poolu není výrazně větší než velikost bloku. V ideálním případě by měl mem-pool zůstat prázdný po vyražení nového bloku.

Transakce opouštějí mem-pool uzlu, protože jsou zahrnuty v bloku. Mem-pool může dosáhnout plné kapacity. V tomto případě není možné přijímat nově příchozí transakce. Jedná se o protitlakový mechanismus. Uživatelé se mohou setkat s tím, že jejich transakce nebude sítí přijata. Musí se po nějaké době pokusit znovu odeslat transakci (nebo to za ně může udělat peněženka/agent).

V současné době je velikost mem-poolu 145 kb. Velikost bloku je 90 kb. Typická transakce je zhruba 300 bajtů. Do mem-poolu se vejde asi 500 běžných transakcí.

Cílem mem-poolu není ukládat všechny odeslané transakce v případě přetížení sítě. Cílem mem-poolu je držet dostatečně velký počet transakcí pro nový blok. Tedy zajistit maximální možnou propustnost. Zvýšení mem-pool nemůže vyřešit nízkou škálovatelnost.

Obecně platí, že větší mem-pooly jen přinášejí více práce a větší latenci. Cardano je navrženo tak, aby nebufferovalo mnoho transakcí, ale aby vytvořilo zpětný tlak na okraje systému. Zdá se, že je to lepší přístup než používání velkých mem-poolů, protože poskytuje lepší zpětnou vazbu a využívá méně zdrojů ke správě čekající práce.

Front-Running útok

Každý operátor uzlů řídí svůj mem-pool. Nikdo však nemá kontrolu nad mem-pooly jiných operátorů. Transakce v mem-poolu nejsou šifrovány. Provozovatel poolu je může analyzovat. Je dokonce možné zveřejnit transakce vlastního mem-poolu.

Mít kontrolu nad mem-poolem může být výhodou. Zejména v případě, že branou pro uživatelské transakce je konkrétní uzel. Operátor může identifikovat konkrétní transakci a její dopad na účetní knihu v případě vložení transakce do nového bloku.

Podvodný operátor může transakci uživatele pozdržet a vložit před ni jeho transakci, která bude mít podobné parametry. Z toho může profitovat. Uživatel může chtít provést nějaký ziskový obchod na DEX. Operátor může zadržet transakci uživatele a rychle odeslat jeho transakci. Podvodná transakce se dostane do ostatních mem-poolů před transakcí uživatele. Provozovatel tak před uživatelem provede výhodný obchod.

Na obrázku vidíte, že uživatel odeslal transakci T1 v čase N. Operátor transakci analyzoval, než ji vložil do svého mem-poolu a vysílal na peery. Vyhodnotil, že jde o ziskový obchod. Proto v čase N+1 (o něco později) předložil (podvodnou) transakci T0 a vysílal ji do sítě před uživatelskou transakcí. Peers obdrží nejprve transakci T0 a poté T1. Uzel 2 již má transakce v mem-poolu. Uzel 3 přijímá transakce v pořadí zvoleném operátorem uzlu 1.

Uživatelé by měli více přemýšlet o uzlu, přes který je jejich transakce odeslána do sítě. O podobný front-running útok se však teoreticky může pokusit kterýkoli operátor uzlu na obrázku výše. Tedy operátor uzlů 2 a 3.

Pokud by byl operátor uzlu 1 poctivý a nechtěl spáchat front-running útok, byla by uživatelova transakce vyslána do sítě. Pokud by operátoři uzlů 2 a 3 chtěli spáchat front-running útok, bylo by to pro ně složitější, protože uživatelská transakce by se již dostala k části uzlů v síti (která ji bude znovu vysílat). Úspěch útoku by byl otázkou náhody a záleželo by na tom, který uzel bude v příštím kole zvolen vedoucím slotu.

Vysoký počet uzlů producentů bloků v síti může potenciálně pomoci zmírnit front-running útoky (a cenzuru transakcí). Je tomu tak proto, že čím je síť decentralizovanější, tím je pro jednu entitu těžší řídit nebo manipulovat s transakčními příkazy. Je však důležité poznamenat, že toto opatření samo o sobě nemusí stačit k úplnému zabránění takovým útokům.

V Cardano se transakční poplatky nepoužívají jako rozhodovací faktor pro zahrnutí transakcí do bloku. To znamená, že uživatelé (včetně provozovatelů poolů) nemohou platit vyšší poplatky za upřednostnění svých transakcí.

Tento návrh může ztížit front-running útoky ve srovnání se sítěmi, které používají koncept trhu s poplatky. V sítích využívajících trh s poplatky mohou uživatelé platit vyšší poplatky, aby byly jejich transakce zpracovány rychleji, což mohou útočníci potenciálně zneužít.

Závěr

Operátoři vidí uživatelské transakce a mohou si vybrat, které z nich vloží do nového bloku, pokud se stanou vedoucími slotů, ale nemohou krást aktiva uživatelů. Mohou však manipulovat transakce ve svůj prospěch. Například zpomalit jejich vysílání na peery.

Pochopení funkce mem-poolu je důležité v kontextu životního cyklu transakce. Mezi odesláním transakce a okamžikem, kdy se transakce stane neměnnou, jsou dvě důležitá období: latence transakce a finalita transakce.

Latence transakce je doba mezi odesláním transakce a jejím zobrazením v ledgeru (v novém bloku). Finalita transakce je doba mezi zobrazením v prvním bloku, dokud není transakce neměnná. Transakce bude neměnná, jakmile bude za blokem, který ji obsahuje, dostatečný počet nově připojených bloků (minimálně 5).

Článek napsali Cardanians s podporou Cexplorer.

Přečtěte si celý článek v AJ: https://cexplorer.io/article/understanding-the-cardano-mem-pool