🇸🇰 Pochopenie Cardano Mem-Poolu

Pochopenie Cardano Mem-Poolu

Mem-pool je miesto, kde transakcie čakajú na vloženie do bloku. Každý uzol produkujúci blok musí udržiavať svoj mem-pool. Mať kontrolu nad mem-poolom je výhoda, ktorá sa dá zneužiť. V článku sa dozviete, na čo sa mem-pool používa. Vysvetlíme si, ako funguje front-running útok.

Čo je mem-pool?

V distribuovanej sieti neexistuje centrálny bod, ktorý by riadil produkciu blokov. V sieti Cardano sa približne každých 20 sekúnd náhodne zvolí jeden uzol (vedúci slotu), ktorý získa právo raziť nový blok. Výrobcovia blokov (alebo pooly) sa nachádzajú po celom svete a nový pool sa môže spustiť kedykoľvek a kdekoľvek.

Keď používateľ zadá do siete transakciu, musí sa dostať do všetkých bazénov. Nie je totiž vopred známe, ktorý líder slotu bude vylosovaný v nasledujúcom kole. V ideálnom prípade sa transakcia dostane do všetkých uzlov, takže existuje šanca, že ju nasledujúci líder slotu vloží do nového bloku.

V každom okamihu používatelia na celom svete odosielajú transakcie. Uzly potvrdzujú transakcie, ale to je jediné, čo s nimi môžu v danom okamihu robiť. Ak sú transakcie platné, musia niekde počkať, kým sa vložia do nového bloku.

Mem-pool slúži ako akási čakáreň pre transakcie pred ich pridaním do účtovnej knihy.

Mem-pool si môžete predstaviť ako dočasnú pamäť na každom uzle, kde sú transakcie dočasne uložené, než sa dostanú do bloku. Keď sa transakcie dostanú do bloku, budú v účtovnej knihe uložené navždy (pokiaľ sa blockchain nereorganizuje).

Každý pool (uzol) môže mať iné zloženie mem-poolu, pretože transakcie dostáva v inom poradí.

Ak Alica z Európy, Bob z USA a Carol z Číny predložia transakcie v rovnakom čase, uzly v rôznych častiach sveta dostanú transakcie v rôznom poradí.

Na obrázku môžete vidieť 3 používateľov, ktorí odoslali transakciu v rovnakom čase. Každý používateľ použil iný uzol (pretože napríklad použil inú ľahkú peňaženku). Každá transakcia sa dostala do najbližšieho uzla, ktorý ju vložil do svojho mem-poolu. Uzly potom transakciu rozposlali rovnocenným partnerom. V závislosti od kvality sieťového spojenia sa transakcie dostanú k peerom veľmi pravdepodobne v inom poradí. Vrstovnícke uzly overujú transakcie a vkladajú ich do mem-poolu, kde už čakajú ďalšie transakcie. Ako vidíte, každý mem-pool vyzerá inak. Všetky mem-pooly obsahujú všetky odoslané transakcie, ale v inom poradí.

Pre zjednodušenie nie sú na obrázku zobrazené reléové uzly.

Transakcie sú k dispozícii v mem-poole vo všetkých uzloch, takže nezáleží na tom, ktorý z nich sa stane ďalším vedúcim slotu. Ak sa transakcie zmestia do nového bloku, všetky sa doň vložia.

Na obrázku môžete vidieť, že uzol 1 bol zvolený za lídra slotu. Uzol 1 vezme všetky transakcie z mem-poolu a vloží ich do nového bloku. Uzol 1 vyrazí nový blok a pridá ho do svojej účtovnej knihy. Uzol 1 rozošle blok rovnocenným uzlom (uzol 2 a uzol 3). Vrstovníci o novom bloku ešte nevedia, takže transakcie sú stále v ich mem-poole.

Na obrázku môžete vidieť, že uzol 2 a uzol 3 dostali nový blok od uzla 1. Uzly 2 a 3 blok overili a pridali ho do svojej účtovnej knihy. Počas tohto procesu tieto uzly vymazali z mem-poolu tie transakcie, ktoré boli v novom bloku. Všimnite si, že používatelia medzitým odoslali nové transakcie. Tie transakcie, ktoré už boli v účtovnej knihe, boli vymazané zo všetkých mem-poolov. Mem-pool sa však neustále napĺňa novými transakciami.

Na poslednom obrázku majú všetky uzly rovnaký stav účtovnej knihy, ale iné poradie transakcií v mem-pooloch. V ďalšom kole sa zvolí nový vedúci slotu a celý proces sa zopakuje.

Predtým, ako sa na blok niečo zapíše, musí sa najprv presunúť cez mem-pool. Je to neoddeliteľná súčasť fungovania uzla blockchainu. To isté, čo sa deje s transakciami, platí aj pre certifikáty (delegačné certifikáty, registračné certifikáty poolu atď.). Pri overovaní transakcií sa môžu vykonávať skripty.

Mem-pool ukladá kandidátske transakcie (v lokálnej pamäti) pred ich vložením do nového bloku. Každý uzol sa snaží zostať synchronizovaný s ostatnými uzlami v sieti. Keďže sieťová komunikácia nie je vždy spoľahlivá alebo včasná, každý uzol má trochu (alebo niekedy výrazne) odlišný mem-pool. Uzly zaraďujú transakcie do frontu podľa poradia, v akom prichádzajú.

Mem-pool funguje ako akási sieťová vyrovnávacia pamäť. Ak nie je možné zaradiť všetky transakcie do nového bloku, transakcie môžu čakať v mem-poole. Ale len do pevne stanoveného limitu. Veľkosť mem-poolu nie je výrazne väčšia ako veľkosť bloku. V ideálnom prípade by mem-pool mal zostať po vytlačení nového bloku prázdny.

Transakcie opúšťajú mem-pool uzla, pretože sú zahrnuté do bloku. Mem-pool môže dosiahnuť plnú kapacitu. V takom prípade nie je možné prijať novo prichádzajúce transakcie. Ide o mechanizmus spätného tlaku. Používatelia sa môžu stretnúť s tým, že sieť ich transakciu neprijme. Po určitom čase sa musia pokúsiť transakciu znovu odoslať (alebo to za nich môže urobiť peňaženka/agent).

V súčasnosti je veľkosť mem-poolu 145 kb. Veľkosť bloku je 90 kb. Typická transakcia má zhruba 300 bajtov. Do mem-poolu sa zmestí približne 500 bežných transakcií.

Cieľom mem-poolu nie je ukladať všetky odoslané transakcie v prípade, že je sieť preťažená. Cieľom mem-poolu je uchovávať dostatočne veľký počet transakcií pre nový blok. Inými slovami, zabezpečiť maximálnu možnú priepustnosť. Zväčšenie mem-poolu nemôže vyriešiť nízku škálovateľnosť.

Vo všeobecnosti väčšie mem-pooly len vytvárajú viac práce a väčšie oneskorenie. Cardano nie je navrhnuté na vyrovnávanie veľkého množstva transakcií, ale na spätný tlak na okraje systému. Zdá sa, že je to lepší prístup ako používanie veľkých mem-poolov, pretože poskytuje lepšiu spätnú väzbu a používa menej zdrojov na správu čakajúcej práce.

Front-Running Attack

Každý operátor uzla ovláda svoj mem-pool. Nikto však nemá kontrolu nad mem-poolmi iných operátorov. Transakcie v mem-poole nie sú šifrované. Prevádzkovateľ fondu ich môže analyzovať. Dokonca je možné zverejniť transakcie svojho mem-poolu.

Mať kontrolu nad mem-poolom môže byť výhodou. Najmä v prípade, že konkrétny uzol je bránou pre transakcie používateľov. Prevádzkovateľ môže identifikovať konkrétnu transakciu a jej vplyv na účtovnú knihu v prípade, že je transakcia vložená do nového bloku.

Podvodný operátor môže zdržať transakciu používateľa a vložiť svoju transakciu pred ňu. Útočníkova transakcia bude mať podobné parametre ako transakcia používateľa. Môže z nej profitovať. Používateľ môže chcieť uskutočniť nejaký ziskový obchod na DEX. Operátor môže transakciu používateľa zadržať a rýchlo predložiť svoju transakciu. Podvodná transakcia sa dostane do ostatných mem-poolov skôr ako transakcia používateľa. Operátor tak uskutoční ziskový obchod pred používateľom.

Na obrázku vidíte, že používateľ predložil transakciu T1 v čase N. Operátor analyzoval transakciu predtým, ako ju vložil do svojho mem-poolu a rozposlal ju partnerom. Vyhodnotil, že ide o ziskový obchod. Preto v čase N+1 (o niečo neskôr) predložil (podvodnú) transakciu T0 a odvysielal ju do siete pred transakciou používateľa. Vrstovníci dostanú najprv transakciu T0 a potom T1. Uzol 2 už má transakcie v mem-poole. Uzol 3 prijíma transakcie v poradí, ktoré zvolil operátor uzla 1.

Používatelia by mali viac premýšľať o uzle, prostredníctvom ktorého sa ich transakcia odosiela do siete. O podobný front-runningový útok sa však teoreticky môže pokúsiť ktorýkoľvek operátor uzla na obrázku vyššie. Takže operátor uzlov 2 a 3.

Ak by bol operátor uzla 1 čestný a nechcel by spáchať front-running útok, transakcia používateľa by bola vyslaná do siete. Ak by operátori uzlov 2 a 3 chceli spáchať front-running útok, bolo by to pre nich ťažšie, pretože transakcia používateľa by sa už dostala do časti uzlov v sieti (ktoré ju budú opäť vysielať). Úspech útoku by bol otázkou náhody a závisel by od toho, ktorý uzol bude v nasledujúcom kole zvolený za vedúceho slotu.

Existencia vysokého počtu uzlov, ktoré produkujú bloky, v sieti môže potenciálne pomôcť zmierniť útoky na predbiehanie (a cenzúru transakcií). Čím viac je totiž sieť decentralizovaná, tým ťažšie je pre jeden subjekt kontrolovať alebo manipulovať poradie transakcií. Je však dôležité poznamenať, že samotné toto opatrenie nemusí stačiť na úplné zabránenie takýmto útokom.

V Cardane sa poplatky za transakcie nepoužívajú ako rozhodovací faktor pri zaraďovaní transakcií do bloku. To znamená, že používatelia (vrátane prevádzkovateľov poolov) nemôžu platiť vyššie poplatky za uprednostnenie svojich transakcií.

Táto konštrukcia môže sťažovať útoky typu front-running v porovnaní so sieťami, ktoré používajú koncepciu trhu poplatkov. V sieťach, ktoré využívajú trh poplatkov, môžu používatelia platiť vyššie poplatky za rýchlejšie spracovanie svojich transakcií, čo môžu útočníci potenciálne zneužiť.

Záver

Operátori vidia transakcie používateľov a môžu si vybrať, ktoré z nich vložia do nového bloku, ak sa stanú lídrami slotu, ale nemôžu ukradnúť aktíva používateľov. Môžu však manipulovať s transakciami vo svoj prospech. Napríklad spomaliť ich vysielanie rovnocenným partnerom.

Pochopenie funkcie mem-poolu je dôležité v kontexte životného cyklu transakcií. Medzi odoslaním transakcie a okamihom, keď sa stane nemennou, sú dve dôležité obdobia: latencia transakcie a konečnosť transakcie.

Transakčná latencia je čas medzi odoslaním transakcie a jej objavením sa v účtovnej knihe (v novom bloku). Konečnosť transakcie je čas od objavenia sa v prvom bloku do momentu, keď je transakcia nemenná. Transakcia bude nemenná, len čo sa za blokom, ktorý ju obsahuje, objaví dostatočný počet novo pripojených blokov (aspoň 5).


Pôvodný článok: Understanding the Cardano Mem-Pool | Cardano Explorer (cexplorer.io)