UTXO kontra blockchainy oparte na kontach: działanie, różnice i zastosowania

UTXO kontra blockchainy oparte na kontach: działanie, różnice i zastosowania

Czym są blockchainy UTXO i oparte na kontach?

Blockchainy UTXO i oparte na kontach to dwa różne sposoby, w jakie blockchain zapisuje, kto posiada jaką kryptowalutę i jak przetwarzane są transakcje.

Znane przykłady blockchainów działających w modelu UTXO to Bitcoin, Litecoin, Dogecoin i Bitcoin Cash. Cardano korzysta z bardziej rozbudowanej wersji, czyli modelu eUTXO, który umożliwia także bardziej złożoną logikę i smart contracts.

Znane blockchainy oparte na kontach to Ethereum, Solana oraz C-Chain w sieci Avalanche. W takich blockchainach stan jest przechowywany w kontach, na przykład w saldach i innych zapisanych danych. Ethereum używa na przykład kont zawierających między innymi saldo i nonce, natomiast Solana przechowuje cały stan w kontach.

UTXO to skrót od Unspent Transaction Output, czyli niewydanego wyniku transakcji. To część kryptowaluty pochodząca z wcześniejszej transakcji, która nie została jeszcze wydana. Można to porównać do pojedynczych cyfrowych banknotów. Każdy banknot ma określoną wartość i można go wydać tylko raz.

Gdy na przykład wykonujesz transakcję Bitcoin, używasz jednego lub kilku istniejących UTXO jako inputów. Następnie są one uznawane za wydane. Jednocześnie powstają nowe UTXO dla odbiorcy oraz ewentualnie dla reszty, która wraca do nadawcy.

Model oparty na kontach działa bardziej jak zwykły rachunek bankowy. Konto ma aktualny stan, na przykład saldo, które rośnie lub maleje w miarę przetwarzania transakcji. W Ethereum takie konto zawiera oprócz salda ETH na przykład także nonce oraz, zależnie od typu konta, informacje o kodzie i zapisanych danych.

Najważniejsza różnica dotyczy więc administracji. Blockchain UTXO śledzi oddzielne, niewydane jeszcze jednostki wartości, natomiast blockchain oparty na kontach zapisuje przede wszystkim aktualne saldo i inne dane dla każdego konta.

Nie oznacza to automatycznie niczego na przykład o konsensusie, prywatności czy możliwościach smart contracts. Istnieją też bardziej rozbudowane modele UTXO, takie jak eUTXO, które wspierają bardziej złożoną logikę.


Najważniejsze informacje

  • Model UTXO przechowuje wartość jako oddzielne, niewydane jeszcze outputy z wcześniejszych transakcji.
  • Model oparty na kontach przechowuje zmienne saldo i inne dane dla każdego konta.
  • Bitcoin korzysta z modelu UTXO, a Ethereum jest znanym przykładem blockchaina opartego na kontach.
  • W modelu UTXO istniejący output jest zużywany, a w jego miejsce powstają nowe outputy.
  • Oba modele mogą na publicznych blockchainach mieć pseudonimowe, ale dobrze śledzalne transakcje.

Jak działa model UTXO?

Model UTXO działa z oddzielnymi fragmentami kryptowaluty, które nie zostały jeszcze wydane. Taki UTXO pochodzi z wcześniejszej transakcji i można go użyć tylko wtedy, gdy spełnione są powiązane z nim warunki. Zazwyczaj potwierdzasz cyfrowym podpisem, że masz prawo wydać ten UTXO.

Gdy tworzysz nową transakcję, odwołuje się ona do jednego lub kilku istniejących UTXO. Sieć sprawdza następnie, czy te UTXO nie zostały już wcześniej wydane i czy spełniono warunki.

Ważne: UTXO nie można zużyć częściowo. Gdy go użyjesz, cały UTXO zostaje wydany. Dlatego przy płatności często powstaje kilka nowych UTXO: jedno dla odbiorcy i ewentualnie jedno dla pozostałej kwoty, która wraca do nadawcy. To ostatnie nazywa się też change output.

Przykład: Załóżmy, że Twój portfel kryptowalutowy może wydać jedno UTXO o wartości 1 BTC i chcesz wysłać komuś 0,4 BTC.

Wtedy całe UTXO o wartości 1 BTC zostaje użyte jako input. Transakcja może na przykład wysłać 0,4 BTC do odbiorcy, a pozostałą kwotę, po odjęciu opłaty transakcyjnej, odesłać jako nowe UTXO na adres, którym zarządzasz.

Stare UTXO o wartości 1 BTC przestaje wtedy istnieć. Zamiast niego powstają nowe UTXO.

Twoje widoczne saldo nie składa się więc z jednej kwoty zapisanej na blockchainie. To suma wszystkich UTXO, które Twój portfel może wydać.

Łatwo też sprawdzić wartość transakcji. Łączna wartość nowych outputów nie może być wyższa niż wartość użytych inputów. Różnica między nimi może trafić jako opłata transakcyjna do minera, który tworzy blok.

W Bitcoinie do UTXO można też przypisać dodatkowe warunki za pomocą skryptów. Taki skrypt określa, na jakich zasadach UTXO może zostać wydany. Dzięki temu Bitcoin jest programowalny w pewnym zakresie autoryzacji, ale model skryptów Bitcoina jest znacznie bardziej ograniczony niż rozbudowane smart contracts, na przykład w Ethereum.

Jak działa model oparty na kontach?

Model oparty na kontach działa z kontami, z których każde ma aktualny stan. Pomyśl na przykład o saldzie i nonce. Nonce to rosnący numer, który pokazuje, ile transakcji wysłało dane konto. Dzięki temu sieć może zapobiec ponownemu wykonaniu tego samego polecenia transakcyjnego.

W zwykłej transakcji ETH saldo nadawcy jest zmniejszane, a saldo odbiorcy zwiększane. Następnie nowy stan obu kont jest zapisywany w Ethereum.

Ethereum rozróżnia dwa typy kont:

  • Externally owned accounts (EOA): konta zarządzane za pomocą klucza prywatnego. To zwykle konta, którymi użytkownicy zarządzają przez portfel. Konto EOA może samo rozpocząć transakcję.
  • Konta kontraktowe: konta, do których przypisany jest kod smart contractu. Nie mają klucza prywatnego i nie inicjują samodzielnie transakcji zewnętrznej. Wykonują kod, gdy zostaną wywołane przez transakcję lub inny kontrakt.

Transakcja z konta EOA zawiera między innymi informacje o celu, kwocie, nonce, podpisie, ewentualnych dodatkowych danych oraz o tym, ile gas można maksymalnie zużyć. Gas określa, ile obliczeń Ethereum może wykonać dla danej transakcji.

Jeśli transakcja trafia tylko do zwykłego konta, można na przykład wysłać ETH. Jeśli trafia do konta kontraktowego, EVM, czyli środowisko wykonawcze Ethereum, może uruchomić kod tego kontraktu.

Dzięki temu jedna transakcja może zrobić znacznie więcej niż tylko wysłać ETH. Smart contract może na przykład przenosić tokeny, zmieniać zapisane dane albo wywoływać inne smart contracts.

Walidatorzy sprawdzają i przetwarzają transakcje według tych samych zasad. Jeśli transakcja jest poprawna, nowe salda i inne zmiany stają się częścią nowego stanu Ethereum.

Jakie są najważniejsze różnice między tymi modelami?

Największa różnica dotyczy sposobu, w jaki blockchain śledzi, co ktoś posiada.

W modelu UTXO obecny stan składa się z oddzielnych fragmentów kryptowaluty, które nie zostały jeszcze wydane. W modelu opartym na kontach każde konto ma natomiast aktualny stan, taki jak saldo, nonce i ewentualnie zapisane dane kontraktu.

W modelu UTXO zużywasz istniejące outputy i tworzą się nowe outputy. W modelu kont istniejący stan jest bezpośrednio aktualizowany. Pomyśl na przykład o saldzie, które spada, nonce, które rośnie, albo danych w smart contractcie, które się zmieniają.

Również podwójne wydanie jest zapobiegane w inny sposób. W modelu UTXO ten sam output można wykorzystać tylko raz. W modelu opartym na kontach nonce pomaga przetwarzać transakcje z tego samego konta we właściwej kolejności i zapobiega ponownemu wykonaniu tego samego polecenia.

Zbyt uproszczone byłoby stwierdzenie, że UTXO nadaje się tylko do płatności, a blockchainy oparte na kontach tylko do smart contracts. Rozbudowane modele UTXO, takie jak eUTXO, mogą również wspierać bardziej złożoną logikę i smart contracts.

To, jak blockchain działa w praktyce, nie zależy wyłącznie od modelu UTXO lub kont. Znaczenie mają też na przykład portfel kryptowalutowy, opłaty transakcyjne, maszyna wirtualna i ewentualne techniki prywatności.

Czym różnią się transakcje i administracja saldem?

W transakcji UTXO Twój portfel używa jednego lub kilku istniejących UTXO jako inputów. Portfel wyszukuje wystarczającą liczbę oddzielnych kwot, aby opłacić płatność i koszty transakcji. Nazywa się to też coin selection.

Czy wybrane UTXO razem są warte więcej niż kwota, którą chcesz wysłać? Wtedy zwykle powstaje nowe UTXO z pozostałą kwotą. Nazywa się to change output.

W modelu UTXO Twoje saldo składa się więc z kilku oddzielnych UTXO, które razem tworzą całe dostępne saldo.

W modelu opartym na kontach działa to inaczej. Konto ma jedno saldo, które jest bezpośrednio aktualizowane. Jeśli na przykład wysyłasz ETH, saldo Twojego konta spada, a saldo odbiorcy rośnie.

Transakcje z tego samego konta Ethereum mają dodatkowo własny nonce. Dzięki temu Ethereum wie, w jakiej kolejności należy je przetwarzać. Jest to ważne, ponieważ wcześniejsza transakcja może wpłynąć na późniejszą. Na przykład Twoje saldo może się zmienić albo smart contract może mieć już inny stan.

Transakcji Ethereum nie da się więc dobrze porównać do jednego inputu i jednego outputu. Transakcja zaczyna się wprawdzie od jednego konta, ale smart contract może podczas wykonania zmienić wiele kont, tokenów i zapisanych danych.

Czym różnią się prywatność i możliwość śledzenia?

Publiczne blockchainy UTXO i oparte na kontach są zwykle pseudonimowe. Oznacza to, że adres nie pokazuje automatycznie Twojego imienia i nazwiska, ale transakcje i adresy są publicznie widoczne na blockchainie.

W Bitcoinie często używa się różnych adresów do różnych transakcji. Również reszta z transakcji może trafić na nowy adres. Dzięki temu nie zawsze od razu widać, które adresy należą do tej samej osoby.

Mimo to analitycy mogą rozpoznawać wzorce. Jeśli na przykład kilka adresów zostanie użytych razem jako input do jednej transakcji Bitcoin, może to sugerować, że ta sama strona kontroluje te adresy. Nie jest to jednak twardy dowód.

W Ethereum ludzie często używają tego samego adresu konta do wielu różnych działań. Dzięki temu transakcje, ruch tokenów i interakcje ze smart contracts z tego adresu można łatwiej ze sobą powiązać.

Żaden z tych modeli nie jest automatycznie anonimowy ani bardziej przyjazny prywatności. Dodatkowe techniki, takie jak zero-knowledge proofs, mixery lub shielded transactions, mogą zwiększyć prywatność. Są to jednak rozwiązania dodatkowe, a nie standardowa część modelu UTXO lub kont.

Jakie zalety i wady mają blockchainy UTXO i oparte na kontach?

Oba modele mają mocne i słabe strony. To, które podejście działa lepiej, zależy od tego, co blockchain lub aplikacja ma robić.

Zalety modelu UTXO

  1. Jasna struktura transakcji W transakcji UTXO dokładnie widać, które istniejące outputy są używane i jakie nowe outputy powstają. Dzięki temu przepływ środków w obrębie transakcji jest łatwy do śledzenia.

  2. Możliwość równoległego przetwarzania Transakcje, które nie używają tych samych UTXO, mogą w niektórych modelach UTXO być sprawdzane niezależnie od siebie. Może to dawać przestrzeń do równoległego przetwarzania.

  3. Jasna kontrola podwójnego wydania UTXO można wydać tylko raz. Gdy zostanie użyty, przestaje istnieć jako dostępny output.

Wady modelu UTXO

  1. Więcej pracy dla portfeli Portfel kryptowalutowy musi zdecydować, które UTXO zostaną użyte do płatności. Nazywa się to coin selection. Trzeba też zarządzać change outputs i dużą liczbą małych UTXO.

  2. Wspólny stan może być bardziej skomplikowany Jeśli kilka transakcji potrzebuje tego samego UTXO do wykonania logiki kontraktu, mogą wejść ze sobą w konflikt. Gdy jedna transakcja użyje tego UTXO, druga może wymagać ponownego zbudowania z nowym stanem.

Zalety modelu opartego na kontach

  1. Prosta administracja saldem Konto ma aktualne saldo, które jest bezpośrednio aktualizowane. Dzięki temu portfel nie musi najpierw wyszukiwać kilku oddzielnych UTXO.

  2. Przydatny dla wspólnego i trwałego stanu Blockchainy oparte na kontach, takie jak Ethereum, mogą bezpośrednio przypisywać dane do kont i smart contracts. Dobrze pasuje to do aplikacji, w których wiele transakcji opiera się na tych samych zapisanych informacjach.

  3. Odpowiedni dla złożonych smart contracts Smart contract może podczas jednego wykonania zmieniać różne salda, konta i zapisane dane. Dzięki temu model jest praktyczny dla wielu różnych typów aplikacji blockchainowych.

Wady modelu opartego na kontach

  1. Transakcje silniej zależą od bieżącego stanu Wynik transakcji może zależeć od salda, nonce lub danych kontraktu w momencie jej wykonania. Wcześniejsza transakcja mogła już w międzyczasie zmienić ten stan.

  2. Kolejność transakcji ma znaczenie Transakcje z tego samego konta muszą być wykonywane we właściwej kolejności nonce. Również w przypadku smart contracts kolejność przetwarzania transakcji może wpływać na końcowy stan.

  3. Więcej wspólnego stanu może utrudniać przetwarzanie Gdy wiele transakcji próbuje zmieniać te same konta lub dane kontraktu, nie zawsze są one całkowicie niezależne od siebie.

Krótko mówiąc: żaden z tych modeli nie jest automatycznie szybszy, tańszy, bezpieczniejszy ani lepszy pod względem prywatności. Takie cechy zależą od całego projektu blockchaina i od tego, jak został w nim zrealizowany model UTXO lub kont.

Kiedy który model blockchaina jest odpowiedni?

Model UTXO dobrze pasuje do zastosowań, w których wartość jest przechowywana jako oddzielne kwoty, a każdy output można wydać tylko raz. Dobrze sprawdza się to na przykład w płatnościach, gdzie trzeba jasno widzieć, które kwoty są używane i jakie nowe kwoty powstają później.

Jeśli chcesz budować bardziej złożone aplikacje, model UTXO nadal może być odpowiedni. Rozbudowane warianty, takie jak eUTXO, mogą również wspierać smart contracts i bardziej złożone reguły.

W takich zastosowaniach trzeba jednak dobrze przemyśleć, jak wielu użytkowników jednocześnie pracuje na tych samych danych. Jeśli wiele transakcji stale potrzebuje tego samego UTXO, mogą się ze sobą zderzać. Rozdzielenie danych na kilka UTXO może czasem ograniczyć takie konflikty.

Model oparty na kontach dobrze pasuje natomiast do aplikacji, w których dane są często zmieniane, a wiele działań opiera się na tym samym zapisanym stanie. W Ethereum transakcja może na przykład wysłać ETH i jednocześnie wywołać smart contract, który następnie zmienia zapisane dane.

To, które podejście jest najbardziej odpowiednie, nie zależy więc wyłącznie od etykiety UTXO lub account-based. Najważniejsze jest to, co aplikacja ma robić, ilu użytkowników jednocześnie chce zmieniać te same dane, jak złożone są smart contracts i jakie doświadczenie chcesz zapewnić w portfelach.

Podsumowanie

UTXO i blockchainy oparte na kontach rozwiązują ten sam podstawowy problem, ale robią to w inny sposób. UTXO działa z oddzielnymi, jednorazowo wydawalnymi outputami, natomiast model kont przechowuje zmienny stan dla każdego konta.

W przypadku prostych płatności różnica jest dobrze widoczna: w modelu UTXO zużywa się stare cyfrowe kwoty i tworzy nowe, natomiast w modelu kont salda są aktualizowane. Przy bardziej złożonych zastosowaniach wybór staje się ciekawszy. Warianty UTXO mogą wspierać smart contracts, a modele kont również dobrze nadają się do przekazywania wartości.

Najważniejsze nie jest więc to, który model jest ogólnie lepszy. Chodzi o to, który model najlepiej pasuje do tego, co blockchain lub aplikacja ma robić.

O Finst

Finst to wiodąca platforma kryptowalutowa w Holandii, oferująca bardzo niskie opłaty transakcyjne, bezpieczeństwo klasy instytucjonalnej oraz szeroki zakres usług crypto, takich jak trading, przechowywanie aktywów, staking oraz wpłaty i wypłaty fiat. Finst, założona przez byłych kluczowych członków zespołu DEGIRO, jest autoryzowana jako dostawca usług w zakresie kryptoaktywów na mocy MiCAR przez Holenderski Urząd ds. Rynków Finansowych (AFM) i obsługuje klientów detalicznych oraz instytucjonalnych w 30 krajach europejskich.

Platforma krypto dla wszystkich inwestorów

Niezależnie od tego, czy aktywnie handlujesz, czy inwestujesz długoterminowo, Finst pomaga Ci rozwijać portfel krypto z pewnością i spokojem.

Zarejestruj się