V tomto článku popíšeme, jak funguje model UTxO prostřednictvím analogie s bankovkami. Tento zjednodušený pohled dále upřesníme.
UTxO jsou jako bankovky
Lidé vnímají bankovní účet jako zůstatek. Je to číslo, které se zvyšuje, pokud někdo posílá peníze na účet, nebo klesá, pokud majitel účtu peníze utrácí. Podobně funguje model založený na účtu, který používá Ethereum.
Pokud má Alice na svém účtu 3 ETH a pošle Bobovi 1 ETH, transakce Ethereum odečte 1 ETH z Alicina účtu a přidá ho na Bobův účet. Transakce Ethereum je atomická operace. To znamená, že se to děje v jednom okamžiku změnou stavu, ke které dochází prostřednictvím bloků.
V případě Cardana zapomeňte na analogii s bankovním účtem. Model UTxO se na pozadí chová úplně jinak, ačkoli to uživatelé díky peněženkám Cardano nepostřehnou.
Model UTxO nemá ponětí o pojmech jako účet a zůstatek. UTxO se chová spíše jako bankovky, které mohou mít libovolnou nominální hodnotu. To znamená, že UTxO může být 6,9 ADA, 47 ADA nebo 459,7 ADA. Peněženky Cardano pomáhají uživatelům pracovat s UTxO jako zůstatek na účtu. 3 zmíněné UTxO uvidí Alice ve své peněžence jako 513,6 ADA.
Co se stane, když Alice bude chtít poslat Bobovi 50 ADA?
Alice vytvoří transakci v peněžence Cardano. Kromě Bobovy adresy příjemce zadala také částku 50 ADA. Peněženka potřebuje vložit UTxOs do transakce, která bude mít celkem 50 ADA plus 0,17 ADA za poplatek.
Peněženka může jako vstup pro transakci používat buď jeden vstupní UTxO s hodnotou 459,7 ADA, nebo dva vstupní UTxO s hodnotou 6,9 ADA a 47 ADA. Peněženka volí druhou možnost. Jako vstup pro transakci je použito celkem 53,9 ADA.
Transakce Cardano specifikuje vstupní UTxO (nebo pouze vstupy) a výstupní UTxO (nebo pouze výstupy). Celková hodnota vstupů musí být rovna nebo větší než celková hodnota výstupů.
Každý vstup UTxO lze utratit pouze jednou, což znamená, že jej lze použít jako vstup pouze pro jednu transakci. Jakmile je UTxO použito jako vstup, celkové množství finančních prostředků daného UTxO je navždy spotřebováno. Jako výstup transakce je obvykle vytvořeno více nových UTxO, které lze použít jako vstup pro budoucí transakci.
Všimněte si, že vstupem transakce je větší množství ADA, než chce Alice poslat Bobovi (včetně poplatku). To je v souladu s tím, jak funguje model UTxO. Prostřednictvím transakce Alice utratí 50,17 ADA, takže prostřednictvím nově vytvořeného UTxO se jí na účet vrátí 3,73 ADA.
Transakce bude mít 2 výstupní UTxO. 50 ADA pro Boba a 3,73 ADA pro Alici.
Na obrázku níže můžete vidět popsanou transakci. Oba vstupní UTxO budou zcela vyčerpány a budou z nich vytvořeny výstupní UTxO. Hodnota výstupních UTxO bude nižší o transakční poplatek. Bob dostává přesně 50 ADA.
Poplatek není novým UTxO, ale spíše rozdílem mezi celkovou hodnotou vstupů a celkovou hodnotou výstupů. Poplatek se platí síti za zpracování a ověření transakce. Poplatek se chová jako model založený na účtu, protože je odečten ze zůstatku odesílatele a přidán k zůstatku sítě, aniž by se vytvořil nový výstup. Na rozdíl od modelu založeného na účtu však poplatek není v transakci výslovně specifikován, ale spíše implicitně vypočítán sítí.
UTxO se chová stejně jako při platbě bankovkami na pokladně v obchodě. Pokud musíte zaplatit řekněme 36 USD, můžete zaplatit 50 USD a pokladní vám vrátí 14 USD. Nebo můžete použít dvě 20dolarové bankovky a pokladní vám vrátí 4 dolary. Pokud jste platili za zboží v hodnotě přesně 20 USD, můžete zaplatit 20 USD a pokladní vám nic nevrátí. S Cardano samozřejmě musíte vždy zaplatit transakční poplatek.
Někomu může pomoci porovnat UTxO s útržky s čísly nalepenými na tabulích. Výdajem se rozumí přeškrtnutí čísla na stávajícím lístku a nalepení nových lístků s novými čísly tak, aby hodnota přeškrtnutého čísla a čísla na nových lístcích byla stejná.
Dovolte mi krátce odbočit k jinému tématu.
Model UTxO je dobré chápat v kontextu uváděné 24hodinové přenosové hodnoty sítě.
V našem příkladu s Alicí a Bobem bylo mezi 2 účastníky přeneseno pouze 50 ADA. Toto je částka, která by měla být vykázána. 3.73 ADA byla vrácena na účet Alice a neměla by být zahrnuta do reportu. Pro analytiky by mělo být snadné zjistit, který výstup UTxO šel na novou (cizí) adresu a který se vrátil do peněženky odesílatele. K rozlišení se často používá staking klíč.
Vstupní UTxO není možné zahrnout do reportu, protože peněženka Alice mohla použít vstupní UTxO s hodnotou 1000 ADA (pokud by to v peněžence nebylo vhodnější), což by report hodně zkreslovalo. To se však může stát i v případě, že analytici správně nerozpoznají UTxO které šlo na novou (cizí) adresu a UTxO které vracelo část prostředků zpět do peněženky odesílatele.
Co je UTxO?
Ve výše uvedeném vysvětlení jsme provedli některá zjednodušení pro snazší pochopení. Teď to napravíme.
UTxO znamená Unspent Transaction Output. UTxO je výstupem předchozí transakce, kterou lze v budoucnu utratit transakcí.
Vstup 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. Jinými slovy, je to odkaz na předchozí transakční výstup. Adresa aktuálního vlastníka prostředků je uvedena v předchozí transakci. Vstupní UTxO odkazuje na transakci, která vytvořila UTxO, který vlastní aktuální utrácející.
Výstupní bod vstupního UTxO se skládá z ID transakce a výstupního indexu transakce, která vytvořila UTxO. Index výstupu odkazuje na pozici výstupu v transakci. Hodnota (funds) je množství mincí nebo tokenů, které UTxO drží.
Strukturu UTxO můžete vidět na obrázku níže.

Výstup UTxO v předchozí transakci obsahuje také adresu příjemce, což je adresa aktuálního vlastníka prostředků. Níže najdete příklad.
Když se UTxO stane vstupem nové transakce, nová transakce určí výstupní adresu (nebo adresy), která obdrží finanční prostředky ze vstupu. Výstupní adresa může být buď adresa veřejného klíče (která vyžaduje podpis k odemknutí) nebo adresa skriptu (k odemčení vyžaduje vykupitele). Výstup UTxO obsahuje také adresu příjemce.
Je to transakce, která spojuje výstupní bod s adresou příjemce. Tento odkaz není trvalý, protože adresa příjemce se může v budoucnu stát výstupním bodem pro další transakci. Jinými slovy, UTxO jsou neustále spotřebovávány a vytvářeny transakcemi v síti. Při vytvoření nové transakce musí být pro každou vstupní adresu poskytnut svědek.
Outpoint je spojením mezi adresou vlastníka a UTxO, protože identifikuje, ke kterému výstupu které transakce UTxO patří.
Transakce Cardano je struktura, která obsahuje čtyři hlavní složky: vstupy, výstupy, poplatek a svědky (Witness). Vstupy jsou UTxO, které jsou spotřebovány transakcí. Výstupy jsou UTxO, které jsou vytvořeny transakcí. Poplatek je částka za transakci, která se platí síti za zpracování a ověření. Svědci jsou důkazem, že uživatel má právo vstupy utratit.
Každý výstup obsahuje důležitou dílčí komponentu, a to adresu příjemce.
Na obrázku níže můžete vidět strukturu výstupu UTxO v transakci, která vytvořila výstupní UTxO (nové UTxO). Všimněte si, že obsahuje adresu příjemce.

Na následujícím obrázku můžete opět vidět Alicinu transakci. Všimněte si, že adresy, ze kterých se ADA utrácejí, nejsou součástí transakce. Transakce odkazuje pouze na adresy prostřednictvím výstupních bodů (zelené šipky).
Alice musí prokázat, že adresy jsou její a že má právo utratit ADA mince. U každé adresy s finančními prostředky je v transakci svědek (červené šipky).
V transakci jsou 2 výstupy s indexy 0 a 1. Každý index obsahuje UTxO, který obsahuje i adresu příjemce. Výstup s indexem 0 obsahuje UTxO s 50 ADA a adresa příjemce patří Bobovi. Výstup s indexem 1 obsahuje UTxO s 3,73 ADA a adresa příjemce patří Alici. Modré šipky označují místo v blockchainu, kde se nacházejí UTxO, kde budou nalezeny adresy vlastníků finančních prostředků (nové UTxO), když je vytvořena nová transakce k jejich utracení.
Když lidé mluví o UTxO, je to obvykle ve zjednodušené podobě. UTxO je vnímáno pouze jako hodnota, která je držena na adrese majitele a kterou lze utratit. Útrata znamená přesun hodnoty z adresy odesílatele na adresu příjemce. To v podstatě popisuje, co se skutečně děje.
Je důležité si uvědomit, že prostřednictvím transakcí dochází ke zničení vstupních UTxO a vytvoření nových UTxO. Nově vytvořené UTxO se mohou stát vstupy (vstupy UTxO) nových transakcí. Transakční historie je stále uložena v blockchainu. Každý UTxO lze utratit pouze jednou. Celá hodnota UTxO je tedy utracena. Uzly udržují sadu všech nevyčerpaných (aktivních) UTxO, které lze utratit. S každým novým blokem přidaným do blockchainu se mění sada UTxOs.
Na následujícím obrázku můžete vidět, jak UTxO mizí a jak vznikají nové UTxO. Aktivní sada se skládá z UTxO z transakcí 5, 6, 7, 8 a 9. UTxO z transakcí 1, 2, 3 a 4 jsou navždy utraceny (zničeny).
Aby bylo možné utratit UTxO v transakci 9, bylo nutné, aby blockchain ověřil podpis vlastníka prostředků. Vstup UTxO v transakci 9 odkazuje na adresu příjemce (což je adresa aktuálního vlastníka) v transakci 4. Podpis (Witness) v transakci 9 je ověřen oproti adrese na výstupu UTxO z transakce 4.
Pokud transakce projde validací a je zahrnuta do blockchainu prostřednictvím nového bloku, mohou vlastníci výstupního UTxO v transakci 9 utrácet prostředky v budoucnu.
Během ničení a vytváření UTxO nesmí vznikat nové hodnoty ze vzduchu. V našem příkladu je hodnota na vstupu UTxO z transakce 1 rovna součtu všech hodnot z UTxO, které patří do aktivní sady (všech UTxO, které lze utratit).
Pokud zanedbáme poplatky, musí platit, že hodnota vstupů v transakci musí odpovídat hodnotě výstupů.
Na obrázku níže byla hodnota vstupního UTxO 100 coinů v transakci 1. To se rovná hodnotě všech výstupů v aktivní sadě UTxOs. 100 = 8 + 2 + 15 + 5 + 18 + 12 + 3 + 7 + 23 + 7.
Závěr
Model UTxO se může zdát složitý ve srovnání s modelem založeným na účtech. To platí i pro programátory aplikací, kterým může být práce s tímto modelem složitější, protože nepracují s balancemi, ale s UTxO. I přes vyšší komplexnost má model UTxO některé výhody, zejména v kontextu použití v distribuovaných sítích. O tom si povíme více příště.
Článek připravili Cardanians s podporou Cexplorer.
Přečtěte si celý článek: https://cexplorer.io/article/understanding-utxo