🇸🇰 Pochopenie zvyškov v UTxO

Pochopenie zvyškov v UTxO

Cardano používa inovatívny rozšírený model účtovania UTxO na podporu viacerých aktív a inteligentných kontraktov. Je odlišný od modelu založeného na účtoch, ktorý používajú banky alebo Ethereum. V tomto článku stručne vysvetlíme rozdiel medzi modelmi založenými na účtoch a UTxO. Cieľom článku je podrobne vysvetliť, ako používatelia míňajú UTxO.

Rozdiel medzi UTxO a modelom založeným na účtoch

Model založený na účtoch je založený na koncepcii účtov a zostatkov, ktoré pripomínajú fungovanie banky. Tento model používa Ethereum. Používatelia majú účty, na ktorých je uložený zostatok ich mincí. Transakcie aktualizujú zostatky na účtoch odosielateľa a príjemcu. Ide o atomické operácie závislé od globálneho stavu.

Model extended-UTxO rozširuje model UTxO, ktorý používa Bitcoin. Je založený na koncepte nespotrebovaných výstupov transakcií (UTxO). UTxO možno použiť ako vstup do novej transakcie. Každá (výdavková) transakcia obsahuje vstupy a výstupy. Transakcie spotrebúvajú nespotrebované výstupy z predchádzajúcich transakcií a vytvárajú nové výstupy, ktoré možno použiť ako vstupy pre budúce transakcie.

V modeli UTxO sú aktíva uložené v účtovnej knihe vo forme UTxO, nie ako zostatky na účtoch. Zostatok adresy sa vypočíta sčítaním hodnôt všetkých UTxO kontrolovaných touto adresou. Účet používateľa môže obsahovať viacero adries. Modely založené na účtoch zvyčajne pracujú len s jednou adresou.

Každé UTxO sa môže minúť len raz, čo znamená, že sa môže použiť ako vstup len do jednej transakcie. Keď sa UTxO použije ako vstup, je spotrebovaný navždy. Ako výstup transakcie sa vytvorí nové UTxO, ktoré sa môže použiť ako vstup pre budúcu transakciu.

Z jedného UTxO použitého ako vstup sa môžu vytvoriť ďalšie UTxO ako výstupy. Každý nový UTxO môže byť odoslaný rôznym príjemcom (adresám). Napríklad UTxO so 100 ADA možno použiť ako vstup pre dve nové UTxO s 20 a 80 ADA. UTxO s 20 ADA možno poslať na Alicinu adresu a UTxO s 80 ADA možno poslať na Bobovu adresu. Týmto spôsobom môže transakcia rozdeliť hodnotu vstupného UTxO a distribuovať ju na rôzne adresy.

To je potrebné, ak Alica má UTxO s hodnotou 100 ADA a chce poslať Bobovi 80 ADA. Na Alicinu adresu sa musí vrátiť 20 ADA.

V modeli UTxO sú transakcie bezstavové, čo znamená, že nezávisia od žiadnej predchádzajúcej histórie alebo globálneho stavu. Transakcie musia poskytovať iba platné vstupy, výstupy, poplatky a svedkov, aby boli platné.

Svedok je údaj, ktorý dokazuje, že transakcia je autorizovaná vlastníkom finančných prostriedkov. Svedkom môže byť buď podpis (v prípade kľúčových poverení), alebo vykonanie skriptu (v prípade skriptových poverení). O ňom budeme hovoriť neskôr.

Sada UTXO je množina všetkých UTxO v sieti Cardano. Sú v nej uložené všetky informácie potrebné na overenie novej transakcie bez toho, aby bolo potrebné kontrolovať celý blockchain. Keď sa vytvorí nová transakcia, vstupné UTXO sa použijú na uplatnenie nároku na finančné prostriedky, ktoré držia.

V modeli založenom na účtoch transakcie aktualizujú globálny stav účtovnej knihy úpravou zostatkov na účtoch odosielateľa a príjemcu. Transakcie sú stavové, čo znamená, že závisia od predchádzajúcej histórie a globálneho stavu účtovnej knihy. Transakcie môžu minúť ľubovoľné množstvo prostriedkov z účtu, pokiaľ je na ňom dostatočný zostatok. Transakcie odpočítavajú mince zo zostatkov účtov odosielateľa a pripisujú ich na zostatky účtov príjemcu. Transakcie môžu tiež vykonávať inteligentné kontrakty, ktoré môžu meniť stav účtovnej knihy alebo spúšťať iné akcie.

Utrácanie UTxO z adries Shelley

Shelleyho adresa sa skladá zo záhlavia a užitočného zaťaženia. Platobné zaťaženie obsahuje referenciu na platobný mandát a adresu kolku. V tomto článku sa nebudeme zaoberať stávkovaním. Zameriame sa len na míňanie UTxO prostredníctvom poverovacích kľúčov (verejný/overovací kľúč). Budú nás teda zaujímať len platobné poverenia.

Na obrázku nižšie môžete vidieť základnú schému Shelleyho adresy.

Platobný mandát je časť Shelleyho adresy, ktorá identifikuje, kto je vlastníkom prostriedkov na adrese. Platobným poverením môže byť buď poverenie kľúča (založené na verejnom/overovacom kľúči), alebo poverenie skriptu (hash výdavkového skriptu). Na jednej adrese Shelley môže byť viacero UTxO.

Je dôležité pochopiť, ako sú UTxO spojené s adresami. Je potrebné zabezpečiť, aby sa UTxO mohli z adresy minúť a aby tá istá adresa mohla prijímať nové UTxO. Často sa používa analógia, že UTxOs sedia na adrese alebo že adresa uchováva UTxOs. UTxOs sa presúvajú medzi adresami odosielateľa a príjemcu. Táto analógia je v poriadku, ale je trochu zjednodušená.

UTxO možno jednoducho opísať ako štruktúru, ktorá sa skladá z identifikátora a hodnoty. Identifikátor je takzvaný outpoint. Outpoint funguje ako ukazovateľ na umiestnenie UTxO v blockchaine. Outpoint sa skladá z ID transakcie a výstupného indexu transakcie, ktorá vytvorila UTxO. Hodnota je množstvo mincí alebo tokenov, ktoré UTxO obsahuje.

UTxO môžete vidieť na obrázku nižšie.

Nové UTxO sa vytvárajú prostredníctvom transakcií. Transakcia spotrebúva vstupné UTxO a vytvára nové UTxO. Keď sieť Cardano spracuje transakcie, vytvoria sa nové (výstupné) UTxO s požadovanou cieľovou adresou a hodnotou (počet mincí alebo tokenov). Po spotrebovaní vstupného UTxO ho nemožno spotrebovať druhýkrát.

Vstupom transakcie je UTxO, ale technicky je to výstupný bod (referencia), ktorý identifikuje UTxO v blockchaine. Outpoint sa skladá z ID predchádzajúcej transakcie a výstupného indexu transakcie, ktorá vytvorila UTxO. Poskytnutím outpointu si transakcia nárokuje prostriedky v UTxO a môže ich použiť ako vstup do novej transakcie.

Vstupný UTxO sa v podstate vzťahuje na adresu (adresu súčasného vlastníka), ktorá musí poskytnúť svedka. Je to preto, že outpoint ukazuje na umiestnenie UTxO v blockchaine a UTxO má cieľovú adresu. Cieľová adresa má platobný mandát, ktorý je buď mandátom kľúča, alebo mandátom skriptu, ktorý identifikuje, kto vlastní finančné prostriedky na danej adrese. Transakcia musí poskytnúť platného svedka pre platobný mandát cieľovej adresy, aby bolo možné UTxO minúť.

Výdaj UTxO má v podstate za následok vytvorenie nového UTxO (alebo viacerých UTxO), ktoré budú spojené s novou cieľovou adresou. Transakcia, ktorá utráca UTxO ako vstup, musí tiež poskytnúť jeden alebo viac výstupov, ktoré špecifikujú cieľové adresy a hodnoty nových UTxO. Nové UTxO sú potom priradené k platobným povereniam cieľových adries, čo znamená, že iba vlastníci poverení ich môžu minúť v budúcich transakciách.

Transakcia neobsahuje pôvodné adresy UTxO priamo, ale nepriamo prostredníctvom výstupných bodov vstupných UTxO. Každý outpoint sa skladá z ID transakcie a výstupného indexu transakcie, ktorá vytvorila UTxO. Sieť musí overiť, že vstupné UTxO môže aktuálny vlastník minúť. Ak validácia prebehne úspešne, potom sa môžu vytvoriť nové UTxO (a priradiť k novým cieľovým adresám).

Na obrázku nižšie môžete vidieť zjednodušenú transakciu Cardano s jedným vstupným UTxO a dvoma výstupmi.

Vstupné pole obsahuje zoznam odkazov na UTxO, ktoré transakcia míňa. V našom prípade je len jedno vstupné UTxO.

Výstupné pole obsahuje zoznam dvojíc adries a hodnôt, na ktoré transakcia posiela prostriedky. Každá dvojica sa skladá z cieľovej adresy a hodnoty. V našom prípade sú dva výstupy.

Celková hodnota vstupov musí byť rovnaká alebo väčšia ako celková hodnota výstupov a poplatku.

Pole poplatok obsahuje sumu ADA, ktorú používateľ zaplatí ako poplatok sieti za spracovanie transakcie.

Pole svedkov obsahuje súbor svedkov, ktorí dokazujú, že transakcia je autorizovaná vlastníkmi finančných prostriedkov (vstupné UTxO) alebo aktérmi akcií. Transakcia musí poskytnúť svedka pre každú vstupnú adresu (alebo identifikátor politiky razenia, účet odmeny za výber alebo poverenie autora certifikátu). V našom prípade existuje len jeden vstupný UTxO, takže na overenie je potrebný len jeden svedok.

Pozrime sa na príklad, v ktorom Alica posiela Bobovi 800 ADA. Rovnako ako na vstupe sa použije UTxO s 1000 ADA. Poplatok za spracovanie transakcie je 1 ADA. Alica potrebuje dostať späť 199 ADA na svoju adresu. Transakcia má teda dva výstupy.

Alica posiela 800 ADA na Bobovu adresu, ktorá má poverovací kľúč založený na Bobovom verejnom kľúči. Alicina transakcia vytvorí prvý UTxO s Bobovou adresou ako cieľom a 800 ADA ako hodnotou. Vytvorí aj druhý UTxO s Alicinou adresou ako cieľom a hodnotou 199 ADA.

Na obrázku nižšie vidíte dve transakcie a dve adresy. Vľavo je predchádzajúca transakcia, prostredníctvom ktorej Alica v minulosti získala UTxO s hodnotou 1000 ADA od niekoho iného. Toto UTxO sa používa ako vstup pre druhú transakciu, ktorú vytvára Alica. Ďalej vidíte Alicinu adresu a Bobovu adresu, ktoré sú použité ako cieľové adresy v Alicinej transakcii.

Alicina transakcia musí obsahovať svedka, aby sa vstup mohol minúť. Vstupný UTxO odkazuje na Alicinu adresu (prostredníctvom predchádzajúcej transakcie), ktorá obsahuje platobné poverenia (modré šípky). Alica musí do svojej transakcie vložiť svedka (podpis súkromným kľúčom). Na obrázku je to označené červenou šípkou.

Zo vstupného UTxO sa vytvoria dva nové výstupy. Finančné prostriedky (1000 ADA) budú rozdelené na viacero adries (poplatok zanedbajme). Prvý výstup obsahuje Alicinu cieľovú adresu a hodnotu 199 ADA. Druhý výstup obsahuje cieľovú adresu Boba a hodnotu 800 ADA. Na obrázku žlté šípky označujú rozdelenie finančných prostriedkov a zelené šípky označujú cieľové adresy.

Keď sieť Cardano transakciu zúčtuje (a dokončí), Bob môže použiť svoj súkromný kľúč a minúť 800 ADA zo svojej adresy. Alica môže použiť svoj (rovnaký) súkromný kľúč na utratenie 199 ADA, ktoré jej zostali po spracovaní transakcie.

Záver

Na prvý pohľad sa môže model UTxO zdať v porovnaní s modelom založeným na účtoch trochu komplikovaný, ale má mnoho výhod, najmä v kontexte škálovateľnosti a bezpečnosti. Nabudúce si popíšeme, ako sa UTxO vynakladá prostredníctvom skriptu validátora.


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