Ako porozumieť transakciám v transakcii
Cardano umožňuje poslať viacero aktív viacerým príjemcom v rámci jednej transakcie. Pre túto funkciu sa niekedy používa trochu nevhodný termín “transakcie v transakcii”. Vysvetlíme si, ako sa transakcie v sieti, ktorá používa účtovný model UTxO, líšia od transakcií v sieti, ktorá používa model založený na účtoch. Dozviete sa tiež, prečo metrika TPS nie je vhodná pre Cardano, ale pre Ethereum ju je možné používať.
Vplyv účtovného modelu na transakcie a škálovateľnosť
Cardano používa účtovný model UTxO (nespotrebovaný výstup transakcií). UTxO predstavuje určité množstvo a typ aktív.
Každá transakcia spotrebuje niektoré UTxO z predchádzajúcich transakcií (UTxO sú vstupom transakcie) a vytvorí nové UTxO, ktoré možno použiť ako vstupy pre budúce transakcie.
V súvislosti s transakciou môžeme hovoriť o vstupných UTxO a výstupných UTxO alebo len o vstupoch a výstupoch. Je to to isté.
Transakcie Cardano menia vlastníkov UTxO. UTxO má adresu, ktorá označuje, kto ho vlastní a môže ho minúť. Výstupy transakcií (UTxO) majú nové adresy, ktoré patria príjemcom transakcie. Transakcia prenáša vlastníctvo UTxO z odosielateľa na príjemcu.
Transakcia môže mať viacero vstupov a viacero výstupov a každý výstup môže mať inú hodnotu a typ aktíva. Každý výstup môže byť odoslaný inému príjemcovi.
Globálny stav Cardano (zostatky používateľov) nepracuje s účtami ani peňaženkami v kontexte účtovnej knihy. Používa sa len súbor UTxO, ktorý je súborom všetkých nespotrebovaných výstupov transakcií v sieti. Súbor UTxO predstavuje aktuálne rozdelenie aktív medzi používateľmi systému Cardano.
Aké sú výhody modelu UTxO z hľadiska škálovateľnosti?
Možnosť poslať viacero aktív viacerým príjemcom znižuje veľkosť transakcie (a tým aj poplatok), čo je výhodné pre škálovateľnosť. Vďaka tomu sa do jedného bloku zmestí viac transakcií.
Proces overovania je jednoduchý a efektívny, keďže sieť musí len skontrolovať, či vstupy transakcie sú platné UTxO z predchádzajúcich transakcií a či súčet hodnôt vstupov je rovnaký alebo väčší ako súčet hodnôt výstupov.
Sieť nemusí sledovať zostatky jednotlivých účtov ani vykonávať žiadnu zložitú logiku spojenú s inteligentnými zmluvami, ako to robí Ethereum (o tom budeme hovoriť neskôr). Cardano nemá žiadne povedomie o účtoch. Každé UTxO môže byť overené nezávisle od iných UTxO, pokiaľ nie sú vynaložené tou istou transakciou. Podobne je to aj v prípade overovania skriptov. Overenie skriptu sa vždy vzťahuje na jedno UTxO.
Model UTxO umožňuje paralelné spracovanie transakcií, ktoré nemajú spoločné vstupy, čo môže zlepšiť škálovateľnosť a priepustnosť. Vyžaduje si to však aj konsenzuálny protokol, ktorý dokáže spracovať súbežné transakcie a vyriešiť konflikty.
Dá sa povedať, že transakcie Cardano sú “paralelné” v tom zmysle, že v rámci jednej transakcie môžu slúžiť viacerým príjemcom s rôznymi aktívami. V rámci jednej validácie sieť obsluhuje viacerých účastníkov. Validácia s viacerými účastníkmi je samozrejme náročnejšia na počítačové zdroje. Je však menej náročná, ako keby sa pre rovnaký počet príjemcov vytvárali samostatné transakcie.
Pozrime sa na model založený na účtoch, ktorý používa Ethereum. Je dôležité pochopiť zdieľaný globálny stav a spôsob, akým Ethereum pracuje so zostatkami používateľov, t. j. s účtami.
Zdieľaný globálny stav Etherea je aktuálny stav všetkých účtov (zostatkov používateľov) a kontraktov v sieti. Každý účet Ethereum má zostatok ETH a iných tokenov. Zdieľaný globálny stav Etherea je potrebné uzamknúť počas spracovania každej jednej transakcie, pretože si vyžaduje (takmer vždy) vykonanie kódu.
Transakcie sú jednoducho prevody hodnoty z jedného účtu na druhý, takže len aktualizujú zostatky používateľov. Napríklad transakcia odpočíta 10 tokenov z Alicinho účtu a pridá ich na Bobov účet.
Tokeny ERC-20 sú definované inteligentnými zmluvami, ktoré implementujú štandardné rozhranie pre prevody tokenov a zostatkov. Prevod tokenov ERC-20 nie je možný bez použitia inteligentnej zmluvy.
V Ethereu existujú dva typy transakcií: transakcia prevodu hodnoty a transakcia inteligentného kontraktu. Transakciou prevodu hodnoty možno previesť len ETH, nie iné tokeny. Môže mať len jedného odosielateľa a jedného príjemcu. Ethereum môže v rámci jednej transakcie posielať viacero aktív, ale len ak transakcia zahŕňa vykonanie inteligentnej zmluvy. Inteligentná zmluva môže tiež implementovať logiku, ktorá môže tieto tokeny previesť na rôznych príjemcov. V porovnaní s Cardanom nie je v Ethereu veľmi obvyklé posielať viacero aktív viacerým príjemcom.
Spracovanie transakcie v Ethereu teda takmer vždy vyžaduje, aby sieť vykonala kód spojený s transakciou a zodpovedajúcim spôsobom aktualizovala stav každého účtu.
Stav každého účtu zahŕňa (okrem iného) jeho zostatok a nonce. Nonce je číslo, ktoré počíta, koľko transakcií účet odoslal.
Zdieľaný globálny stav Etherea musí byť počas tohto procesu uzamknutý, pretože každá transakcia závisí od stavu účtu odosielateľa, ktorý sa môže zmeniť v dôsledku iných transakcií.
Ak napríklad Alica pošle transakciu Bobovi s nonce 1 a potom pošle ďalšiu transakciu Karolovi s nonce 2, sieť musí zabezpečiť, aby sa prvá transakcia spracovala pred druhou, inak by došlo k neplatnému prechodu stavu.
Vplyv uzamknutia zdieľaného globálneho stavu počas spracovania každej jednotlivej transakcie je taký, že obmedzuje škálovateľnosť a priepustnosť siete.
Uzamknutie zdieľaného globálneho stavu znamená, že transakcie, ktoré majú rovnakého odosielateľa alebo príjemcu, sa musia spracovávať postupne, čo môže spôsobiť úzke miesta a oneskorenia. Ak napríklad Alica v krátkom čase odošle 10 transakcií rôznym príjemcom, každá transakcia musí pred spracovaním počkať na potvrdenie svojej predchodkyne. To môže zvýšiť oneskorenie a náklady každej transakcie.
Rozdiel medzi modelom UTxO a modelom založeným na účtoch spočíva v tom, že Cardano pracuje s UTxO, ktoré sú na sebe nezávislé (čo umožňuje paralelizáciu), zatiaľ čo Ethereum pracuje so zostatkami na účtoch, ktoré na sebe závisia (čo si vynucuje sekvenčné spracovanie).
Pravdepodobne už chápete, že pojem “transakcie v transakcii” v podstate označuje možnosť poslať viacero aktív viacerým príjemcom v rámci jednej transakcie. V terminológii Etherea by sme mohli povedať, že jedna transakcia upravuje viaceré zostatky.
Návrh účtovných modelov má vplyv nielen na škálovateľnosť, ale aj na meranie priepustnosti siete.
O vhodnosti metriky TPS pre blockchainy
TPS (Transactions Per Second) je miera počtu transakcií, ktoré sieť dokáže spracovať za jednu sekundu. TPS nám môže povedať, koľko ľudí v danom čase používa alebo môže používať sieť. Metrika TPS predpokladá, že jedna transakcia prenáša hodnotu medzi jedným odosielateľom a jedným príjemcom. Má to však jeden háčik. Tento predpoklad neplatí pre odvetvie blockchain.
TPS sa bežne používa na hodnotenie výkonnosti a škálovateľnosti počítačových systémov, najmä tých, ktoré spracúvajú veľké množstvo finančných transakcií, ako sú platobné systémy, burzy a banky. TPS je vhodný pre bežné finančné systémy, pretože transakcie sa zvyčajne uskutočňujú medzi dvoma účastníkmi s bankovým účtom.
Metriku TPS je možné použiť aj v odvetví blockchainu. Má to však jeden háčik. Ak chceme porovnávať blockchainy s rôznymi účtovnými modelmi, táto metrika je nevhodná. Pre Ethereum je metrika TPS vhodnejšia ako pre Cardano.
Aj keď Ethereum môže v rámci jednej transakcie poslať viacero aktív viacerým príjemcom, nie je to veľmi bežné. TPS teda zodpovedá realite, aj keď môže byť nepresná.
V sieti Cardano môžeme takmer v každom bloku vidieť komplexné transakcie, ktoré prenášajú viacero aktív viacerým príjemcom. Metrika TPS je preto nevhodná a neposkytuje presné čísla.
Za posledných 24 hodín Cardano spracovalo 18 759 jednoduchých transakcií a 30 481 SC transakcií. Aj transakcie, ktoré nie sú SC, môžu previesť viacero aktív viacerým príjemcom. To je však bežnejšie pri SC transakciách (typicky pri aplikáciách DEX).
Jeden z nedávnych blokov Cardano obsahoval 32 transakcií. Metrika TPS vychádza na 1,6. Ak však blok preskúmame podrobnejšie, zistíme, že adries príjemcov bolo spolu 62. Ak by sme podľa toho upravili TPS, dostali by sme číslo 3,1. V bloku bolo celkovo 189 UTxO.
V prípade Etherea by podobný blok s 32 transakciami mal veľmi pravdepodobne len 32 príjemcov, takže by sa upravilo 32 zostatkov.
Ak chcú analytici merať priepustnosť siete Cardano, musia ísť viac do hĺbky a pozrieť sa na obsah transakcií. Správnou metrikou by bolo niečo ako požiadavky za sekundu alebo príjemcovia za sekundu.
Záver
V širšom kontexte si treba uvedomiť, že blockchain pravdepodobne nebude plniť funkciu transakčnej siete, ako je napríklad PayPal. Blockchain, resp. platformy inteligentných zmlúv, môžu byť skôr akousi hlavnou vrstvou zúčtovania pre vyššie vrstvy alebo akousi základnou vrstvou. Aktíva sa budú raziť na blockchaine, ktorý bude strážiť ich menovú politiku, ale používatelia ich budú pravdepodobne používať v iných sieťach. Budúcnosť je v tomto smere neistá, ale v súčasnosti to tak vyzerá.
Používatelia používajú Cardano najmä prostredníctvom aplikácií, o čom svedčí aj zloženie transakcií v bloku. Má zmysel mať v transakciách viac žiadostí, pretože sa tým šetrí miesto v bloku a používatelia ušetria na poplatkoch.
Pôvodný článok: How to Understand Transactions in Transaction | Cardano Explorer (cexplorer.io)