Bitcoin/Transakcje
Przesłanie bitcoinów na adres odbiorcy nazywamy transakcją.
Technicznie w Bitcoin transakcją nazywamy informację (podpisana kryptograficznie wiadomość) o tym, od kogo wysyłamy i do kogo. Jako źródłowe monety wskazywane są wcześniejsze transakcje przychodzące wysyłającego (wejścia) oraz odbiorcy (wyjścia). Pojedyncza transakcja może mieć wiele wejść oraz wielu odbiorców.
Transakcje można zlecać za pomocą aplikacji portfela, np. dostarczanego wraz z oryginalnym klientem. Przedstawiony tu opis nakreśla jak zbudowana jest transakcja, opisuje sposób ich dystrybucji i utrwalania w historii, a także opisuje szczegółową budowę dla zaawansowanych oraz dla osób chcących poznać mechanizmy odpowiedzialne za zabezpieczenia. Gdy zapoznasz się z najważniejszymi kwestiami technicznymi, będzie łatwiej Ci zrozumieć jak działa przesyłanie monet, co jest potrzebne oraz jak system unika podrabiania pieniędzy. Wszystko to wykonuje klient sieci (portfel), a opis jak wysyłać transakcje znajdziesz w części dotyczącej obsługi portfela.
Odbiorca
[edytuj]Odbiorca to osoba odbierająca monety i upoważniona do ich wydawania w kolejnych transakcjach. Jest zazwyczaj identyfikowany za pomocą specjalnego ciągu znaków, zwanego adresem, który jest odpowiednikiem numeru konta. Aby przetransferować środki od jednej do drugiej osoby, odbiorca musi podać wysyłającemu taki adres, który został wygenerowany w portfelu. Wysyłający wpisuje podczas wysłania adres docelowy, który mu podał odbiorca i ilość monet.
Wskazanie odbiorcy oraz, w przypadku wydania tych monet przez odbiorcę, wskazanie pochodzącej transakcji tworzy skrypt. Zazwyczaj służy on do wskazania adresu i są podpisywane kluczem prywatnym (składającego się na adres) wysyłającego. Istnieją też inne formy odbioru określane przez skrypt, np. adresy wielosygnaturowe lub zagadki kryptograficzne.
Wysyłanie i odbieranie
[edytuj]Aby być odbiorcą, nie trzeba mieć włączonego cały czas klienta na czas dokonywania transakcji. Podobnie do wysyłaniu - po wysłaniu można zamknąć program. Nie jest wymagane też bezpośrednie połączenie z węzłem odbiorcy.
Transakcje - zarówno tuż po stworzeniu (jeszcze nie niezatwierdzone) jak i zatwierdzone (dostarczane w blokach) są rozsyłane za pośrednictwem węzłów p2p.
Zatwierdzanie
[edytuj]Po utworzeniu transakcji jest ona rozgłaszana po sieci i przechowywana u każdego użytkownika w tzw. mempool. Zanim jednak zostaną umieszczone w takiej kolejce są one weryfikowane - sprawdzane są wszystkie transakcje wejściowe, które uczestniczą w transakcji oraz zgodność podpisów potwierdzających, że transakcję stworzyła osoba będąca w posiadaniu klucza prywatnego wybranych transakcji wejściowych, będących przychodami wysyłającego.
Zatwierdzający transakcje, tzw. górnicy wybierają z pośród takich oczekujących transakcji najodpowiedniejsze, które umieszczą trwale w tzw. bloku. Nie wszystkie oczekujące transakcje zostaną zatwierdzone od razu, w tym samym bloku, ponieważ jest ograniczony jego rozmiar. Pierwszeństwo mają transakcje standardowe, z wyższą opłatą. Następnie poszukiwane są takie dane, by blok pasował do poprzednich według specjalnego algorytmu. Gdy potrzebne dane zostaną odgadnięte, zostanie utworzony blok, w którym umieszczone zostaną wybrane transakcje. Nazywa się to potwierdzaniem transakcji, a proces tworzenia bloku wraz z otrzymaniem wynagrodzenia za to - wydobywaniem.
Szerzej o procesie tworzenia bloków w rozdziale "Wydobywanie".
Każdy kolejny blok wydobyty po tym, w którym została umieszczona dana transakcja to kolejny numer potwierdzenia dla tejże transakcji. Odbierającym zalecane jest odczekanie na minimum 6 potwierdzeń (6 bloków po tym, w którym znalazła się oczekiwana transakcja), zanim uznają transakcję za zrealizowaną (ryzyko forka).
Zatwierdzanie ma na celu trwałe zapisanie transakcji w sieci. Każdy węzeł przechowuje pełną historię transakcji. Dzięki temu można sprawdzić, czy kolejne transakcje wysyłające przychodzące monety odwołują się do istniejących przychodów oraz czy nie są one przesyłane wielokrotnie (czyli np. posiadacz 1 BTC wysyła jednemu i drugiemu odbiorcy po 1 BTC, czyli razem 2 BTC, czyli "podrobił" dodatkowy 1 BTC). Najprościej mówiąc, dzięki zapisaniu informacji o transakcji w historii (łańcuchu bloków), wydanie konkretnych monet jest przypisane do konkretnej transakcji i próba stworzenia innej, odwołujących się do tych samych monet jest niemożliwe.
Reszta
[edytuj]Jeżeli ilość monet na wejściu jest większa niż wysyłanych to aby nadal je posiadać należy wydać resztę. Każdy klient sieci robi to automatycznie.
Polega to na dodaniu do wyjść dodatkowego adresu odbierającego (domyślnie nowego), na który idzie reszta środków.
Uwaga: Z racji tego, że adresem odbioru reszty jest nowy adres brany z portfela, w przypadku niektórych metod kopii zapasowych należy pamiętać o tym adresie.
Opłata transakcyjna
[edytuj]Pozostała kwota, która nie została wysłana (włącznie z resztą, która jest zwyczajnym wysłaniem) przeznaczana jest na opłatę transakcyjną.
Służy ona do wynagrodzenia górników, którzy wydobędą blok, w którym umieszcza daną transakcję. Nagroda za blok zawiera podstawową stawkę (szerzej w rozdziale "Wydobywanie") oraz sumę opłat transakcyjnych dla wszystkich transakcji, które zostały włączone do bloku.
Im wyższa opłata tym większa szansa na szybsze zatwierdzenie transakcji. Potrzebna opłata może zależeć od rozmiaru transakcji i obciążenia sieci.
Szczegółowa budowa
[edytuj]- Wejścia transakcji
- Wejścia transakcji można określić jako "nadawcy" monet. Wskazują one transakcje przychodzące nadawcy. Ma to na celu potwierdzenie, że wysyłający miał taką ilość monet (poprzez wcześniejsze ich otrzymanie we wskazywanych transakcjach), jaką chce wysłać. Drugi cel to ustalenie adresów bitcoin, które zostaną wykorzystane do podpisania transakcji, dzięki czemu potwierdzone zostanie prawo do dyspozycji tymi adresami. Wskazywanie wejść to podanie hashu transakcji i numeru wyjścia (liczonego od zera), wraz z podpisaniem tej informacji przy użyciu klucza prywatnego do adresu wskazywanego w przywołanym wyjściu. Wejścia dobierane są takie, by suma wartości otrzymanych w nich monet była co najmniej taka jak monety wysyłane + opłata transakcyjna. Różnica musi być wydana jako reszta, a pozostała jej część jest opłatą transakcyjną (zobacz wyżej).
- Wyjścia transakcji
- Wyjścia transakcji to odbiorcy. W jednej transakcji jest możliwe określenie wielu odbiorców. Możliwość stworzenia wielu wyjść jest wykorzystywana także do wydawania reszty z wejść, które nie zostały wysłane do właściwych odbiorców ani przeznaczone na opłatę transakcyjną.
W skrócie, transakcja działa tak:
Wydaję z transakcji: #o hashu ''hash'' wyjście #''numer''" /powtórzyć krok dla kolejnych wejść/ i wysyłam do odbiorców: #''numer_wyjścia'': Na adres ''Adres bitcoinowy'' kwotę ''X'' BTC /powtórzyć krok dla kolejnych wyjść/
Numery wejść i wyjść to numery kolejności (która jest zapamiętana taka, jak nadano podczas tworzenia transakcji i ma potem znaczenie), liczone od zera.
Wyjścia i wejścia zawierają część zwaną skryptem. Skrypt to mechanizm służący do potwierdzania uprawnienia do wydania monet. Wyjście zawiera pierwszą część skryptu, która określa, kto może wydać transakcję. Domyślnie wskazuje na adres bitcoinowy, ale umożliwia też tworzenie bardziej zaawansowanych reguł. Gdy wydajemy bitcoiny i odwołujemy się w wejściach do transakcji, które nam je przyznały, umieszczana jest dalsza część skryptu. W przypadku adresów, jest nią sygnatura i komendy zlecające weryfikację podanej sygnatury i wcześniej zakodowanego adresu w pierwszej części skryptu umieszczonego na wyjściu transakcji wejściowej.
Na powyższej ilustracji Transakcja 3 wydaje monety otrzymane jako odbiorca #0 transakcji #1 o wartości 1 BTC oraz z transakcji #2 jako odbiorca #2 i wysyła całą ich sumę do 1 innego odbiorcy.
Wydawanie tych samych pieniędzy
[edytuj]Cały mechanizm uniemożliwia wydanie tych samych monet, czyli nikt nie wyda więcej niż dostał, gdyż przy wysyłaniu wskazywane są transakcje zasilające nasze konto jako już użyte.
Zapisany blok z transakcjami jest częścią łańcucha bloków rozsyłanego wszystkim węzłom i nie jest możliwe podmienienie zmodyfikowanego bloku, gdyż są one ze sobą powiązane, także zawartość samego bloku jest hashowana, a taki hash jest jednym z parametrów takiego bloku.
Kiedy każdy węzeł otrzyma nowa transakcję, sprawdza czy w zatwierdzonych już transakcjach (taką historię transakcji posiada każdy węzeł) nie występuje na jakimkolwiek wejściu jakiejkolwiek transakcji wskazywana w nowej transakcji para transakcja-numer_wyjścia. Jeżeli występuje, jest to próba podwójnego wydania (double spend), a transakcja zostanie odrzucona i nie będzie wybierana podczas tworzenia nowego bloku. Aby wydać niewysłane wcześniej środki, portfel wybiera monety otrzymane w innych transakcjach przychodzących, w tym odebrane jako reszta poprzednich transakcji wysyłających.
Zobacz też
[edytuj]- Wysyłanie i odbieranie w interfejsie graficznym
- Opis mechanizmu skryptów - jak działa klejenie transakcji (wejść i wyjść)
- Tworzenie transakcji dla zaawansowanych - Szczegółowy opis budowy transakcji i sposoby tworzenia dla zaawansowanych.