🇨🇿 Jak se utrácí UTxO

Cardano používá inovativní účetní model Extended UTxO pro podporu více aktiv a inteligentních smluv. Liší se od modelu založeného na účtu, který používají banky nebo Ethereum. V tomto článku stručně vysvětlíme rozdíl mezi modely založenými na účtu a modely UTxO. Cílem článku je podrobně vysvětlit, jak uživatelé utrácejí UTxO.

Rozdíl mezi UTxO a modelem založeným na účtu

Model založený na účtech (account-based model) je založen na konceptu účtů a zůstatků, které se podobají fungování banky. Ethereum používá tento model. Uživatelé mají účty, které drží jejich zůstatek v mincích. Transakce aktualizují zůstatky na účtech odesílatele a příjemce. Jde o atomovou operaci závislou na globálním stavu.

Rozšířený model UTxO rozšiřuje model UTxO, který používá Bitcoin. Je založen na konceptu nevyčerpaných transakčních výstupů (UTxO). UTxO lze použít jako vstup pro novou transakci. Každá (výdajová) transakce obsahuje vstupy a výstupy. Transakce spotřebovávají nevyčerpané výstupy z předchozích transakcí a vytvářejí nové výstupy, které lze použít jako vstupy pro budoucí transakce.

V modelu UTxO jsou aktiva uložena v účetní knize ve formě UTxO, nikoli jako balance na účtech. Zůstatek adresy se vypočítá sečtením hodnot všech UTxO kontrolovaných touto adresou. Uživatelský účet může obsahovat více adres. Modely založené na účtech obvykle pracují pouze s jednou adresou.

Každý UTxO lze utratit pouze jednou, což znamená, že jej lze použít jako vstup pouze pro jednu transakci. Jakmile je UTxO použit jako vstup, je navždy spotřebován. Jako výstup transakce je vytvořen nový UTxO, který lze použít jako vstup pro budoucí transakci.

Z jednoho UTxO použitého jako vstup lze vytvořit více UTxO jako výstupy. Každý nový UTxO může být zaslán různým příjemcům (adresám). Například UTxO se 100 ADA lze použít jako vstup pro dva nové UTxO s 20 a 80 ADA. UTxO s 20 ADA lze poslat na adresu Alice a UTxO s 80 ADA lze poslat na Bobovu adresu. Tímto způsobem může transakce rozdělit hodnotu vstupu UTxO a distribuovat ji na různé adresy.

To je nutné, pokud má Alice UTxO se 100 ADA a chce poslat Bobovi 80 ADA. 20 ADA se musí vrátit na Alicinu adresu.

V modelu UTxO jsou transakce bezstavové, což znamená, že nezávisí na žádné předchozí historii nebo globálním stavu. Aby byly transakce platné, stačí poskytnout platné vstupy, výstupy, poplatky a svědky.

Svědek je údaj, který dokazuje, že transakce je autorizována vlastníkem prostředků. Svědkem může být buď podpis (pro pověření klíče) nebo provedení skriptu (pro pověření skriptu). Promluvíme si o tom později.

Sada UTXO je sada všech UTxO v síti Cardano. Ukládá všechny požadované informace pro ověření nové transakce, aniž by bylo nutné kontrolovat celý blockchain. Když je vytvořena nová transakce, vstupní UTXO se použijí k získání prostředků, které drží.

V modelu založeném na účtech transakce aktualizují globální stav hlavní knihy úpravou zůstatků účtů odesílatele a příjemce. Transakce jsou stavové, což znamená, že závisí na předchozí historii a globálním stavu účetní knihy. Transakce mohou utratit libovolnou částku prostředků z účtu, pokud je na účtu dostatečný zůstatek. Transakce odečítají mince ze zůstatků na účtu odesílatele a připisují je k zůstatkům na účtu příjemce. Transakce mohou také provádět inteligentní smlouvy, které mohou upravovat stav účetní knihy nebo spouštět jiné akce.

Útrata UTxO z adres Shelley

Adresa Shelley se skládá z hlavičky a datové části. Datová část obsahuje platební pověření a odkaz na stake adresu. V tomto článku se nebudeme zabývat stakingem. Zaměříme se pouze na utrácení UTxO prostřednictvím klíčů (veřejný/ověřovací klíč). Nás tedy budou zajímat pouze platební údaje (payment credentials).

Na obrázku níže můžete vidět základní schéma Shelley adres.

Platební pověření je součástí adresy Shelley, která identifikuje, kdo vlastní prostředky na adrese. Platební pověření může být buď pověření klíče (na základě veřejného/ověřovacího klíče) nebo pověření skriptu (hash skriptu výdajů). Na jedné adrese Shelley může být více UTxO.

Je důležité pochopit, jak jsou UTxO spojeny s adresami. Musí být zajištěno, že UTxO lze utratit z adresy a že stejná adresa může přijímat nové UTxO. Často se používá analogie, že UTxO sedí na adrese nebo že adresa obsahuje UTxO. UTxO se přesouvají mezi adresami odesílatele a příjemce. Tato analogie je dobrá, ale je poněkud zjednodušená.

UTxO lze zjednodušeně popsat jako strukturu, která se skládá z identifikátoru a hodnoty. Identifikátorem je tzv. outpoint. Outpoint funguje jako ukazatel na umístění UTxO v blockchainu. Outpoint se skládá z ID transakce a výstupního indexu transakce, která vytvořila UTxO. Hodnota je množství mincí nebo tokenů, které UTxO drží.

UTxO můžete vidět na obrázku níže.

Nové UTxO se vytvářejí prostřednictvím transakcí. Transakce spotřebovává vstupní UTxO a vytváří nové UTxO. Když síť Cardano zpracovává transakce, jsou vytvořeny nové (výstupní) UTxO s požadovanou cílovou adresou a hodnotou (počet coinů nebo tokenů). Jakmile je vstup UTxO spotřebován, nelze jej spotřebovat podruhé.

Vstupem transakce je UTxO, ale technicky je to výstupní bod (reference), který identifikuje UTxO v blockchainu. Výstupní bod se skládá z předchozího ID transakce a výstupního indexu transakce, která vytvořila UTxO. Poskytnutím výstupního bodu si transakce nárokuje prostředky v UTxO a může je použít jako vstup pro novou transakci.

Vstup UTxO v podstatě odkazuje na adresu (adresu aktuálního vlastníka), která musí poskytnout svědka. Je to proto, že outpoint ukazuje na umístění UTxO v blockchainu a UTxO má cílovou adresu. Cílová adresa má platební pověření, což je buď klíčové pověření, nebo pověření skriptu, které identifikuje, kdo vlastní prostředky na adrese. Aby bylo možné utratit UTxO, transakce musí poskytnout platný doklad o platebním pověření cílové adresy.

Utracení UTxO v podstatě vede k vytvoření nového UTxO (nebo více UTxO), které bude spojeno s novou cílovou adresou. Transakce, která utratí UTxO jako vstup, musí také poskytnout jeden nebo více výstupů, které specifikují cílové adresy a hodnoty nových UTxO. Nové UTxO jsou pak spojeny s platebními pověřeními cílových adres, což znamená, že pouze vlastníci pověření je mohou utratit v budoucích transakcích.

Transakce neobsahuje původní adresu UTxO přímo, ale spíše nepřímo prostřednictvím výstupních bodů vstupních UTxO. Každý výstupní bod se skládá z ID transakce a výstupního indexu transakce, která vytvořila UTxO. Musí být ověřeno sítí, že vstupní UTxO může aktuální vlastník utratit. Pokud ověření projde, mohou být vytvořeny nové UTxO (a spojeny s novými cílovými adresami).

Na obrázku níže můžete vidět zjednodušenou transakci Cardano s jedním vstupem UTxO a dvěma výstupy.

Vstupní pole obsahuje seznam odkazů na UTxO, které transakce utrácí. V našem případě je pouze jeden vstup UTxO.

Výstupní pole obsahuje seznam párů adres a hodnot, na které transakce posílá prostředky. Každý pár se skládá z cílové adresy a hodnoty. V našem případě jsou dva výstupy.

Celková hodnota vstupů musí být rovna nebo větší než celková hodnota výstupů a poplatku.

Pole poplatku obsahuje částku ADA, kterou uživatel zaplatí jako poplatek síti za zpracování transakce.

Pole svědků obsahuje sadu svědků, kteří prokazují, že transakce je autorizována vlastníky prostředků (vstup UTxO) nebo aktéry akcí. Transakce musí poskytnout svědka pro každou vstupní adresu (nebo ID zásady ražby, účet odměny za výběr nebo pověření autora certifikátu). V našem případě je pouze jeden vstup UTxO, takže pro ověření je potřeba pouze jeden svědek.

Podívejme se na příklad, ve kterém Alice pošle Bobovi 800 ADA. Stejně jako na vstupu se používá UTxO s 1000 ADA. Poplatek za zpracování transakce je 1 ADA. Alice se potřebuje vrátit 199 ADA na její adresu. Transakce má tedy dva výstupy.

Alice pošle 800 ADA na Bobovu adresu, která má pověření klíče založené na Bobově veřejném klíči. Aličina transakce vytvoří první UTxO s Bobovou adresou jako cílem a hodnotou 800 ADA. Vytvoří také druhý UTxO s adresou Alice jako cílem a 199 ADA jako hodnotou.

Na obrázku níže vidíte dvě transakce a dvě adresy. Vlevo je předchozí transakce, jejímž prostřednictvím Alice v minulosti získala UTxO s 1000 ADA od někoho jiného. Toto UTxO se používá jako vstup pro druhou transakci, kterou vytvořila Alice. Dále uvidíte adresu Alice a adresu Boba, které se používají jako cílové adresy v transakci Alice.

Alicina transakce musí zahrnovat svědka, aby mohl být vstup utracen. Vstup UTxO odkazuje na Alicinu adresu (přes předchozí transakci), která obsahuje platební údaje (modré šipky). Alice musí do své transakce vložit svědka (podpis soukromého klíče). To je označeno červenou šipkou na obrázku.

Ze vstupu UTxO budou vytvořeny dva nové výstupy. Prostředky (1000 ADA) budou distribuovány na více adres (zanedbejme na poplatek). První výstup obsahuje cílovou adresu Alice a hodnotu 199 ADA. Druhý výstup obsahuje Bobovu cílovou adresu a hodnotu 800 ADA. Na obrázku žluté šipky označují rozdělení prostředků a zelené šipky označují cílové adresy.

Jakmile je transakce vypořádána (a dokončena) sítí Cardano, může Bob použít svůj soukromý klíč k utracení 800 ADA ze své adresy. Alice může použít svůj (stejný) soukromý klíč k utracení 199 ADA, které jí zbyly po zpracování její transakce.

Závěr

Na první pohled se model UTxO může zdát poněkud komplikovaný ve srovnání s modelem založeným na účtu, ale má mnoho výhod, zejména v kontextu škálovatelnosti a bezpečnosti. Příště si popíšeme, jak se UTxO utrácí prostřednictvím validátorového skriptu.

Článek připravili Cardanians s podporou Cexplorer.

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