🇸🇰 Pochopenie ukončenia transakcie

Pochopenie ukončenia transakcie

Systém Cardano Ouroboros PoS používa pravdepodobnostnú konečnosť, kde sa blok považuje za konečný, keď sa zaň pripojí dostatočný počet blokov. Koľko blokov musí byť pripojených a čo sa vlastne stane s transakciou po tom, ako ju používateľ odošle do siete? V článku vysvetlíme pojmy oneskorenie transakcie a konečnosť.

Príbeh transakcie

Alica chce poslať Bobovi 10 ADA. Popíšeme si, čo sa deje s transakciou od jej vytvorenia až po finalizáciu bloku.

Alica vytvorí transakciu vo svojej peňaženke alebo aplikácii. To zahŕňa špecifikáciu podrobností transakcie, ako je Bobova adresa a suma ADA, ktorá sa má previesť.

Alica musí transakciu podpísať svojím súkromným kľúčom. Ak používa HW peňaženku, musí transakciu potvrdiť napríklad podržaním tlačidla. Týmto sa poskytuje dôkaz pravosti a zabezpečuje sa, že transakciu môže iniciovať len vlastník mincí ADA.

Podpísaná transakcia je vysielaná do siete Cardano. Zachytia ju uzly Cardano, ktoré transakciu overia podľa pravidiel protokolu.

Po overení transakcie sa pridá do fondu (mem-pool) platných transakcií, ktoré čakajú na zaradenie do nového bloku.

V konsenzuálnom mechanizme Cardano Ouroboros PoS sa čas delí na epochy a sloty. Pre každý slot sa náhodne vyberie vedúci slotu na základe jeho podielu. Líder slotu vyberie transakcie z fondu, overí ich a vyrazí nový blok.

Nový blok, ktorý obsahuje Alicinu transakciu spolu s ostatnými transakciami, sa pripojí k lokálnej účtovnej knihe a rozošle do siete.

Blok prevezmú uzly Cardano, ktoré ho overia (vrátane všetkých transakcií) podľa pravidiel protokolu. Každý uzol si vedie svoju vlastnú účtovnú knihu a autonómne rozhoduje o tom, ktorý blok do nej pripojí.

Proces výberu transakcií a razenia nového bloku sa opakuje približne každých 20 sekúnd. Hoci blok do účtovnej knihy pridá väčšina uzlov v sieti, transakciu ešte nemožno považovať za konečnú.

Oneskorenie a konečnosť transakcií

Všimnite si, že transakcia sa nemôže považovať za vyrovnanú alebo platnú, keď ju Alica odoslala do siete. Bob si môže byť istý, že vlastní mince ADA, až v okamihu, keď je transakcia konečná.

V opísanom procese existujú dve dôležité obdobia: oneskorenie transakcie a konečnosť transakcie.

Zjednodušene povedané, oneskorenie transakcie 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á.

Popíšme si ju podrobnejšie a na príkladoch.

Oneskorenie transakcie je časový úsek od odoslania transakcie do siete až po jej vloženie vedúcim slotu do nového bloku. Väčšinu času transakcia čaká v poole s inými transakciami.

Cardano zaobchádza s transakciami na základe princípu “kto prv príde, ten prv melie”. Ak je však v poole viac transakcií, ako sa do bloku zmestí, Alicinu transakciu nemusí vedúci slotu do bloku vložiť a bude musieť čakať v poole na ďalšie kolo.

Iný vedúci slotu už má Alicinu transakciu vo svojom fonde. Hneď ako dostane nový blok, môže zo svojho fondu odstrániť tie transakcie, ktoré sú v bloku. V novom kole sa Alicina transakcia vloží do nového bloku.

Oneskorenie transakcie sa mení v závislosti od toho, kedy presne Alica transakciu odošle, a od počtu predtým odoslaných transakcií v poole. Transakcia sa v sieti rozšíri v priebehu niekoľkých sekúnd. Za normálnych okolností sa transakcia aj blok (ktorý je väčší) dostanú k 95 % uzlov do 5 sekúnd.

Ak Alica predloží transakciu tesne pred vytýčením nového bloku a dostane sa do poolu lídra slotu, latencia môže byť doslova niekoľko sekúnd. Niekoľko sekúnd po odoslaní transakcie Alica vidí, že je obsiahnutá v bloku (je v hlavnej knihe). Alica mala šťastie.

Alica však môže mať menej šťastia a transakciu predloží tesne po vytlačení nového bloku. V takom prípade môže transakcia čakať v poole približne 15 sekúnd (keď 5 sekúnd trvala difúzia), kým ju vedúci slotu vloží do nového bloku. Ak je sieť intenzívne využívaná a pool je plný, môže trvať niekoľko blokov, kým vedúci slotu vloží transakciu do nového bloku. Alica môže čakať niekoľko minút, kým uvidí transakciu v bloku.

Akonáhle je transakcia v bloku a dostane sa do účtovnej knihy, vstupuje do hry konečnosť transakcie.

Cardano používa pravdepodobnostnú konečnosť, čo znamená, že blok sa považuje za konečný, keď sa doň pridá dostatočný počet blokov na to, aby bolo úmyselné spustenie paralelného reťazca a pokus o vrátenie kanonického reťazca príliš nákladné alebo nepraktické. Inými slovami, pravdepodobnostná konečnosť sa vzťahuje na myšlienku, že pravdepodobnosť vrátenia transakcie sa znižuje s tým, ako sa blok obsahujúci túto transakciu ponára hlbšie do reťazca.

Používateľ nemá žiadnu istotu, že novo pridaný blok do účtovnej knihy v nej zostane navždy. Môže sa stať, že v jednom slote alebo v dvoch slotoch blízko seba bude vyrazených niekoľko blokov s rovnakou výškou. V takom prípade vzniká takzvaný fork. Jeden z blokov sa zachová, zatiaľ čo druhý osireje. Transakcie v osirelom bloku sú stornované.

Konečnosť bloku (t. j. všetkých transakcií v ňom) je 100 % garantovaná systémom Ouroboros PoS po K blokoch, kde K je parameter siete nastavený na 2160. Konečnosť je garantovaná po 12 hodinách.

Používatelia našťastie nemusia čakať tak dlho. Hoci sa forky v sieti vyskytujú pomerne často, zvyčajne sa vyriešia v priebehu niekoľkých blokov.

Na obrázku môžete vidieť bloky a sloty, v ktorých boli vyťažené. V slote N+40 boli vyrazené 2 bloky. Došlo k vidlici. Vedúci slotu náhodne vylosovaný v slote N+60 pripojí nový blok k červenému bloku, pretože má nižší výkon VRF. Ak majú ostatní lídri slotov k dispozícii všetky bloky, je pre nich ľahké rozhodnúť sa, ktorý reťazec budú nasledovať.

Vysoký stupeň istoty týkajúci sa konečnosti bloku (nemennosť transakcie) predstavuje približne 70 blokov, čo je približne 25 minút. Pomerne veľký stupeň istoty však predstavuje len 5 blokov, čo sú približne 2 minúty.

Ak by Alica poslala Bobovi 10M ADA, Bob by mal takmer absolútnu istotu vlastníctva mincí až po 25 minútach. V prípade 10 ADA stačia 2 minúty.

Každý používateľ si môže definovať vlastnú úroveň istoty. Toto nie je úplne ideálne odporúčanie, ale pre konsenzus s pravdepodobnostnou konečnosťou neexistuje lepšie riešenie.

Všetky čestné uzly, ktoré sa správajú podľa jednotných pravidiel protokolu, akceptujú platné bloky. Všetky uzly sa správajú autonómne a nevedia, ako rozhodli ostatné uzly v sieti (aké bloky pridali do účtovnej knihy). Lídri blokov rozhodujú o tom, ktoré bloky budú nasledovať. Pasívne uzly, ktoré len synchronizujú bloky, nerozhodujú o konečnosti (hoci samy rozhodujú o prijatí blokov).

Vo väčšine prípadov (ak je to možné) si vedúci slotu vyberá predchádzajúci blok (ak je k dispozícii). Je to blok, ktorý bol vyrazený predchádzajúcim vedúcim slotu. Ak aktuálny vedúci bloku neprijal predchádzajúci blok, bude pokračovať tým, čo považuje za najnovší blok. V tomto prípade sa vytvárajú vidlice.

Vidličky sa riešia podľa jednoduchých pravidiel a ak sa väčšina uzlov správa čestne, blok sa môže považovať za finálny, ak je za ním ešte 5 blokov. Konečnosť sa zvyšuje s každým ďalším novo pridaným blokom. Blok, za ktorým je ďalších 25 blokov, je takmer určite finálny (všetky transakcie v ňom sú nemenné). Absolútna istota je 2160 blokov.

Záver

Keď používateľ odošle transakciu do siete, zvyčajne sa pozrie do prieskumníka blockchainu a čaká, kým sa objaví v účtovnej knihe. Ide o transakčnú latenciu. Potom sa zvyčajne čaká na počet potvrdení, čo je v podstate počet blokov, ktoré sú pripojené k bloku, v ktorom je transakcia používateľa. Takto sa zvyčajne správajú používatelia, ktorí používajú konsenzuálnu sieť Nakamoto, takže podobné procesy prebiehajú aj v sieti Bitcoin. Existujú však siete s rýchlejšou konečnou platnosťou, pretože je možné, aby uzly poskytovali “schválenia” buď pred vyťažením bloku, alebo po ňom.


Pôvodný článok: Understanding Transaction Finality | Cardano Explorer (cexplorer.io)