Jak właściwie działają transakcje Bitcoin?

Niezależnie od tego, czy chcesz zostać programistą aplikacji typu blockchain, czy po prostu chcesz zrozumieć, co dzieje się pod maską, gdy wysyłasz bitcoiny do znajomego, dobrze jest mieć praktyczną wiedzę o tym, co się dzieje, gdy tworzysz i emitujesz Bitcoin transakcje do sieci Bitcoin. Czemu?

Ponieważ transakcje są podstawowym bytem, ​​na którym zbudowany jest łańcuch bloków bitcoin. Transakcje są wynikiem genialnej kolizji kryptografii, struktur danych i prostego, niekompletnego skryptowania. Są na tyle proste, że typowe typy transakcji nie są zbyt skomplikowane, ale wystarczająco elastyczne, aby umożliwić programistom kodowanie również dość dostosowanych typów transakcji. Dzisiaj oprowadzimy po tym pierwszym.

Jako programista, w jaki sposób Twój klient Bitcoin publikuje nową transakcję w sieci (i co się dzieje, gdy ją otrzyma)?

Co dokładnie się dzieje, gdy wysyłasz trochę bitcoinów znajomemu?

W tym poście założymy, że czytelnik ma podstawową wiedzę na temat haszowania, asymetrycznej kryptografii i sieci P2P. Warto też dobrze wiedzieć, czym właściwie jest łańcuch bloków, nawet jeśli nie znasz żadnej konkretnej mechaniki.

Transakcje Bitcoin i ich rola w szerszym kontekście

Bitcoin składa się z kilku głównych elementów: węzłów i łańcucha bloków. Rolą typowego węzła jest utrzymywanie własnej wersji łańcucha bloków i aktualizowanie jej, gdy usłyszy o „lepszej” (dłuższej) wersji. Mówiąc najprościej, blockchain ma bloki, a bloki zawierają transakcje.

Mając na uwadze ten uproszczony, ale dokładny obraz, możesz się zastanawiać, z czego dokładnie składa się transakcja.

  • W jaki sposób zrozumienie transakcji pomoże mi zostać lepszym programistą blockchain?
  • W jaki sposób transakcje pozwalają mi przesłać trochę bitcoinów znajomemu?

Okazuje się, że odpowiedzi na te pytania różnią się w zależności od wielu czynników. Nawet zakładając, że mówimy tylko o bitcoinach, możemy wykorzystywać transakcje na wiele kreatywnych sposobów, aby osiągnąć różnorodne spersonalizowane cele. Zacznijmy od początku, to znaczy przyjrzyjmy się staromodnemu typowi transakcji typu pay-to-PK-hash. Przecież tego typu transakcje stanowią ponad 99% wszystkich transakcji na platformie Bitcoin blockchain.

Najpierw zbudujmy model mentalny. Kuszące jest myślenie o bitcoinie jako systemie opartym na koncie. W końcu, kiedy wysyłam komuś bitcoiny, ta osoba otrzymuje pieniądze i zostaje mi pozostałe saldo. Jednak w prawdziwym świecie rzeczy są przedstawiane nieco inaczej. Ogólnie mówiąc, kiedy wysyłam pieniądze do kogoś, wysyłam je, wydając wszystkie te pieniądze (bez opłat transakcyjnych). Część tych pieniędzy zostanie wydana z powrotem na moje osobiste konto, jeśli będzie dostępne pozostałe saldo. Chodzi o to, że wszystkie pieniądze przemieszczają się za każdym razem. Możesz przejść do sekcji 3.1 aby wyjaśnić, dlaczego ten model jest preferowany.


Mając to na uwadze, możemy uogólnić i powiedzieć, że transakcja bitcoin ma pewne dane wejściowe i wyjściowe. Graficzna reprezentacja może wyglądać mniej więcej tak:

Jak właściwie działają transakcje Bitcoin?

Było to dla mnie trochę zagmatwane, kiedy pierwszy raz to zobaczyłem, więc opowiem o tym trochę. Kiedy księguję transakcję, zasadniczo „żądam” wyniku i udowadniam, że mam pozwolenie na wydanie określonej kwoty pieniędzy na ten wynik. Więc jeśli jestem Bobem i chcę zapłacić Alicji, te dane wejściowe są moim dowodem na to, że otrzymałem pewną kwotę pieniędzy (chociaż może to być tylko część mojego całkowitego salda), a wyniki będą odpowiadać kontu Alice . W tym prostym przypadku byłoby tylko jedno wejście i jedno wyjście.

Dokładniejsze spojrzenie na transakcje Bitcoin

Zrozummy mechanikę prawdziwej transakcji bitcoinowej. Użyjemy powyższego obrazu jako odniesienia.

Jeśli miałbyś przeciąć typową transakcję bitcoin, skończyłbyś z trzema głównymi częściami: nagłówkiem, danymi wejściowymi i wyjściowymi. Przyjrzyjmy się pokrótce polom dostępnym dla nas w tych sekcjach, ponieważ będą one ważne do dyskusji. Zauważ, że są to pola, które są w tak zwanej transakcji surowej. Surowe transakcje są transmitowane między równorzędnymi podczas tworzenia transakcji.

Nagłówek

  • haszysz: Skrót całej tej transakcji. Bitcoin zazwyczaj używa wartości skrótu zarówno jako wskaźnika, jak i środka do sprawdzenia integralności fragmentu danych. Przyjrzymy się temu dokładniej w następnej sekcji.
  • wer: Numer wersji, którego należy użyć do zweryfikowania tego bloku. Najnowsza wersja została wprowadzona w miękkim widelcu, który stał się aktywny w grudniu 2015 roku.
  • vin_sz: Liczba wejść do tej transakcji. Podobnie vout_sz zlicza liczbę wyjść.
  • lock_time: Przyjrzymy się temu dokładniej w późniejszych artykułach, ale w zasadzie opisuje to najwcześniejszy czas, w którym można dodać blok do łańcucha bloków. Jest to wysokość bloku lub uniksowy znacznik czasu.

Wejście

  • poprzedni skrót wyjściowy: jest to wskaźnik skrótu do wcześniej niewydanych danych wyjściowych transakcji (UTXO). Zasadniczo są to pieniądze należące do Ciebie, które zamierzasz wydać w ramach tej transakcji.
  • n: Indeks do listy wyników poprzedniej transakcji. To jest rzeczywisty wynik, który wydajesz.
  • scriptSig: To jest skrypt wydatków, który udowadnia, że ​​twórca tej transakcji ma pozwolenie na wydawanie pieniędzy, o których mowa w 1. i 2.

Wynik

  • wartość: ilość wydanego Satoshi (1 BTC = 100 000 000 Satoshi).
  • scriptPubKey: drugi z dwóch skryptów dostarczonych w transakcji bitcoin, który wskazuje na zaszyfrowany klucz publiczny odbiorcy. Więcej na ten temat w ostatniej sekcji tego artykułu.

Weryfikacja transakcji

Jednym z zadań węzła bitcoin jest weryfikacja, czy przychodzące transakcje są prawidłowe (dane nie zostały zmodyfikowane, pieniądze nie są tworzone, tylko docelowi odbiorcy wydają UTXO itp.). Bardziej wyczerpującą listę można znaleźć w Internecie, ale wymienię kilka z najważniejszych tutaj:

  • Wszystkie dane wyjściowe zgłoszone przez dane wejściowe tej transakcji znajdują się w puli UTXO. Niewydane produkty można odebrać tylko raz.
  • Podpisy na każdym wejściu są ważne. Dokładniej mówiąc, mówimy, że połączone skrypty zwracają prawdę po wykonaniu ich jeden po drugim. Więcej na ten temat w ostatniej sekcji.
  • Żadne UTXO nie jest wydawane więcej niż raz w ramach tej transakcji. Zwróć uwagę, jak różni się to od pierwszego elementu.
  • Wszystkie wartości wyjściowe transakcji są nieujemne.
  • Suma wartości wejściowych tej transakcji jest większa niż suma jej wartości wyjściowych. Należy pamiętać, że jeśli liczby są różne, różnica jest uważana za opłatę transakcyjną, której może zażądać górnik.

Podstawowa transakcja typu pay-to-PK-hash

Bitcoin ma własny niestandardowy (podobny do Forth) język skryptowy, który jest wystarczająco potężny, aby umożliwić programistom tworzenie skomplikowanych i niestandardowych typów transakcji. Istnieje około pięciu standardowych typów transakcji, które są akceptowane przez standardowych klientów bitcoin [5], jednak istnieją inni klienci, którzy akceptują inne rodzaje transakcji za opłatą. Omówimy tutaj tylko mechanikę haszowania pay-to-PK.

Aby każda transakcja była prawidłowa, połączona para scriptSig / scriptPubKey musi mieć wartość true. Dokładniej rzecz biorąc, osoba wydająca transakcje dostarcza skrypt scriptSig, który jest wykonywany, a po nim następuje scriptPubKey żądanego wyniku transakcji (pamiętacie, jak powiedzieliśmy, że dane wejściowe żądają wcześniejszych niewydanych wyników transakcji?). Oba skrypty mają ten sam stos.

W trosce o efektywność używajmy (oficjalna wiki bitcoin) odniesienie, o którym mowa. Kiedy odwiedzasz link, przejdź mniej więcej do połowy, aby znaleźć tabelę zawierającą 7 wierszy. Ta tabela pokazuje, w jaki sposób skrypty są łączone, jak przebiega wykonywanie i jak wygląda stos na każdym kroku.

Należy zwrócić uwagę na to, że adresy bitcoin są w rzeczywistości hashami (cóż, staje się to jeszcze bardziej skomplikowane. Widzieć ), nadawca nie ma możliwości poznania rzeczywistego klucza publicznego w celu sprawdzenia klucza prywatnego. W związku z tym Odkupiciel określa zarówno klucz publiczny, jak i klucz prywatny, a scriptPubKey zduplikuje i zahaszuje klucz publiczny, aby upewnić się, że Odkupiciel jest rzeczywiście zamierzonym odbiorcą.

Podczas wykonywania możesz zobaczyć, że stałe są umieszczane bezpośrednio na stosie, gdy zostaną napotkane. Operacje dodają lub usuwają elementy ze stosu podczas ich oceny. Na przykład OP_HASH160 pobierze najwyższy przedmiot ze stosu i ma go dwukrotnie, najpierw z SHA-256, a następnie z RIPEMD-160. Kiedy wszystkie elementy w naszym skrypcie zostaną ocenione, cały nasz skrypt oceni jako true, jeśli prawda pozostanie na stosie, a false w przeciwnym razie.

Podsumowując, hash pay-to-PK jest dość prostym typem transakcji. Zapewnia, że ​​tylko odkupiciel z odpowiednią parą kluczy publiczny / prywatny może ubiegać się o bitcoiny, a następnie wydawać je. Zakładając, że wszystkie inne kryteria są spełnione (patrz poprzednia sekcja), transakcja jest dobra i można ją umieścić w bloku.

W kolejnych artykułach omówię bardziej skomplikowane typy transakcji. Zobaczymy, jak więcej niż dwie strony mogą uczestniczyć w transakcji, i zobaczymy, jak można wdrożyć dłuższe typy transakcji.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
Adblock
detector
map