"UTXO to najprościej mówiąc, niewydane kawałki Bitcoina, które działają bardziej jak banknoty niż saldo na koncie bankowym - gdy je wydajesz, znikają i powstają nowe. Co dzieje się pod spodem każdej transakcji Bitcoin i dlaczego model UTXO ma takie znaczenie."
O co w ogóle chodzi z UTXO?
Jakiś czas temu uczestniczyłem w wykładzie o blockchain i kryptowalutach ale mimo kilkunastu lat w temacie, słuchało mi się go zaskakująco ciężko. Po pierwsze: prowadzący liznął temat i nic poza tym. Po drugie: wątpię, że ktokolwiek to zrozumiał. Pomyślałem, że może od czasu do czasu wrzuce tutaj artykuł, w których będę tłumaczył terminologię blockchain łopatologicznie. Będę skupiał się na Bitcoin SV, ale wiedzę można spokojnie odnosić również do BTC - tam, gdzie są różnice, wyraźnie je wyjaśnię.
Większość tekstów o UTXO skupia się na skrócie i definicji, a nie na tym, jak Ty faktycznie wydajesz bitcoina - przez to widzisz tylko techniczne terminy, a nie prosty model zachowania. Tymczasem UTXO nie jest żadnym rocket science: to konsekwentne trzymanie się analogii gotówki, gdzie każda transakcja spala stare banknoty i tworzy nowe. Sieć utrzymuje zbiór niewydanych outputów (nowych banknotów), czyli UTXO set. Portfel natomiast wyszukuje te UTXO, nad którymi użytkownik może sprawować kontrolę i sumuje ich wartości. Kiedy raz złapiesz tę metaforę, reszta technikaliów - ID transakcji, indeksy wyjść, skrypty, podpisy - stanie bardzo prosta.
UTXO = Unspent Transaction Output
UTXO to skrót od Unspent Transaction Output, czyli niewydane wyjście transakcji. To sposób, w jaki Bitcoin (BTC, BCH i BSV) liczy Twoje, hmm.. saldo. Zamiast jednego salda jak w banku, sieć przechowuje listę konkretnych niewydanych wyjść, które możesz wydać - każdy taki kawałek to właśnie UTXO.
Twoje saldo w portfelu to tak naprawdę suma wszystkich tych niewydanych kawałków, które portfel znajduje na blockchainie i pokazuje jako jedną liczbę, żebyś nie zwariował patrząc na listę dziesiątek drobnych wejść. W praktyce, to portfel/aplikacja zarządza sposobem wydawania Twoich UTXO, a zwykły użytkownik nie musi się martwić (i wiedzieć) jak to działa. I właśnie dlatego dwa portfele pokazujące dokładnie to samo saldo mogą w rzeczywistości posiadać zupełnie inny zestaw UTXO. O zarządzaniu UTXO (z poziomu technicznego) pisałem w tym artykule podczas budowania transakcji w pythonie :)
Portfel, który nie ma salda
W tradycyjnym systemie bankowym masz jedno konto PL12 1240 0000... i podsumowanie: 4273,19 zł - bank aktualizuje ten numer przy każdym przelewie.
W UTXO jest inaczej: nie ma konta z saldem, są tylko wyjścia transakcji, które albo są wydane, albo niewydane (UTXO) i to z nich składa się Twój majątek. Gdy Twój portfel pokazuje Ci "0,52 BSV lub BTC", tak naprawdę sumuje np. trzy niezależne UTXO:
- 0,20 BSV od Ani,
- 0,15 BSV od Marka,
- 0,17 BSV od Jarka.
Gotówka vs konto bankowe
Najprostsze porównanie: UTXO zachowuje się jak fizyczna gotówka. Kiedy płacisz 10 zł za kawę banknotem 50zł, nie skreślasz na nim kwoty 50zł i nie wpisujesz długopisem 40zł, tylko wydajesz cały banknot, a kasjer wydaje Ci resztę w postaci 40zł - a to 40zł staje się Twoim UTXO.
System kontowy nie zadziała w Twoim fizycznym portfelu z banknotami, on działa tak jak konto w banku, zmienia numer: odejmuje 10 zł od Twojego salda i dodaje 10 zł do salda kawiarni.
Jak wygląda transakcja w modelu UTXO
Każda transakcja ma wejście lub wejścia (inputs) i wyjście lub wyjścia (outputs): wejścia to UTXO, które wydajesz, wyjścia to będą nowe UTXO, które powstaną po transakcji.
Wejście (na obrazku TX1) zawsze wskazuje konkretne stare wyjście (poprzednie UTXO) po jego ID/hashu transakcji i indeksie oraz musi spełnić warunek wydania, zapisany w poprzednim outputcie, dostarczając odpowiednie dane, np. podpis lub dane do skryptu. Ten warunek też wymaga wyjaśnienia.
Warunek wydania
- poprawny podpis cyfrowy, potwierdzający, że posiada odpowiedni klucz prywatny,
- dodatkową informację, np. tekst LUBIE_ALICJE.
NIE-typowe transakcje w Bitcoin SV
- wskazuje txid: c3b1iu23gvuhuhd8844jhj..
- wskazuje vout: 2
- wskazuje warunek: 100BitcoinówFajnaSprawa
- wskazuje swój adres: 1Be77gchGhsd5..
UTXO wydajesz w całości
Kluczowa cecha: UTXO jest niepodzielne w momencie wydawania - albo wydajesz je całe, albo wcale.
Jeśli chcesz wysłać 0.1 BSV, a masz tylko jedno UTXO o wartości 0.2 BTC, to transakcja zużywa całe 0.2 BSV jako wejście, tworzy nowe wyjście 0.1 BSV dla odbiorcy i drugie wyjście 0.1 BSV jako resztę z powrotem do Ciebie.
Nie ma opcji, że przetniesz to na pół i wydasz połowę, a potem znowu weźmiesz to samo UTXO. Nie - stare UTXO po transakcji przestaje istnieć, a jego wartość jest podzielona na nowe UTXO, które stają się nowymi monetami w obiegu.
Skąd biorą się pierwsze UTXO?
No dobrze, ale skoro UTXO zawsze jest wyjściem wcześniejszej transakcji, to pojawia się naturalne pytanie: skąd wzięło się pierwsze UTXO? Tutaj mamy wyjątek od całego mechanizmu.
Każdy blok może zawierać specjalną transakcję coinbase. I nie chodzi tutaj o giełdę; coinbase transaction to specjalny typ transakcji tworzonej przez górnika. Jej pierwsze wejście, nie wskazuje żadnego wcześniejszego UTXO. To właśnie dzięki temu protokół może utworzyć nowe bitcoiny w ramach nagrody za wydobycie bloku. Output takiej transakcji staje się następnie normalnym UTXO i może być później wydany.
Czyli w dużym uproszczeniu:
coinbase → pierwsze UTXO → zwykła transakcja → kolejne UTXO → kolejna transakcja → kolejne UTXO
Zobacz jak wygląda pierwsze UTXO w eksploratorze: txid/4a5e1e4baab8..
I tak powstaje cały łańcuch przepływu wartości. Warto przy okazji wiedzieć, że UTXO pochodzące z transakcji coinbase nie można wydać od razu - obowiązuje okres dojrzewania wynoszący 100 bloków.
UTXO vs model konta
W systemie opartym na kontach blockchain musi przechowywać globalny stan: drzewo wszystkich adresów wraz z saldami, licznikami transakcji i ewentualnym kodem kontraktów.
Każda nowa transakcja lub wywołanie smart contractu czyta ten stan, aktualizuje go i zapisuje z powrotem, co tworzy zależności i kolejność wykonywania - dwie transakcje dotykające tego samego konta nie mogą być przetworzone niezależnie.
W modelu UTXO nie ma jednego wspólnego stanu kont - są tylko niezależne wyjścia; jeśli dwie transakcje zupełnie nie dzielą wejść, mogą być walidowane równolegle, bo każda "żyje" w swoim kawałku transakcji.
Skalowalność: dlaczego UTXO lubi równoległość
Jak już wiemy, każde UTXO jest niezależną jednostką wartości, którą można zweryfikować bez oglądania się na salda - protokół sprawdza m.in., czy wskazane UTXO istnieje i nie zostało wcześniej wydane oraz czy transakcja spełnia warunki jego wydania. To sprawia, że walidacja transakcji jest równoległa: wiele transakcji zużywających różne UTXO można liczyć jednocześnie, bo nie modyfikują wspólnej zmiennej w postaci jednego salda.
W systemie kontowym każda transakcja dotyka globalnego stanu i konkretnego konta, więc powstają wąskie gardła na popularnych adresach i kontraktach - tu UTXO ma przewagę, zwłaszcza w wysokiej przepustowości, do której celuje BSV.
Prywatność
UTXO zachęca użytkowników do generowania nowych adresów dla kolejnych transakcji, więc historia przepływu środków nie jest przypięta na stałe do jednego adresu użytkownika.
Każdy nowy UTXO może być związany z innym adresem, co utrudnia czytanie salda jednej osoby, choć oczywiście analityka blockchain nadal potrafi wiele połączyć ;)
W modelu kontowym wygoda ma cenę: masz jeden widoczny adres, stan konta i wszystkie transakcje lecą przez ten sam adres, to ułatwia tworzenie pełnego profilu aktywności użytkownika - UTXO trochę to rozbija na mniejsze kawałki, ale- nie oszukujmy się - nie czyni Cię niewidzialnym.
UTXO w portfelu
Z punktu widzenia zwykłego użytkownika, każdy portfel ukrywa cały ten mechanizm i pokazuje jedno saldo, ale pod spodem operuje listą UTXO, które dobiera jako wejścia do transakcji - często łącząc kilka mniejszych w jedno większe wydanie.
Takie dokładanie UTXO wpływa na rozmiar transakcji i opłaty: im więcej drobnych kawałków trzeba wrzucić do wejść, tym cięższa transakcja i tym wyższa prowizja, stąd pojęcie zarządzania UTXO (pisałem o tym tutaj) i konsolidacji wielu małych UTXO w jeden większy UTXO.
W praktyce jeśli często dostajesz małe płatności, Twój portfel z czasem staje się zbiorem drobniaków, które warto od czasu do czasu połączyć w jedną większą transakcję konsolidującą, żeby późniejsze płatności były tańsze i prostsze.
Ale o transakcji i kilku ciekawych pojęciach, które warto znać, jeszcze tutaj napiszę.
Cześć!
Komentarze
Prześlij komentarz