Przejdź do głównej zawartości

Python Bitcoin bsv-sdk: zarządzanie UTXO

Bitcoin SV w Pythonie

W poprzednich wpisach ( 1, 2, 3, 4 ) wygenerowaliśmy klucz prywatny, poznaliśmy adres testnet, mainnet, sprawdziliśmy saldo, pobraliśmy niewydane transakcje, zbudowaliśmy szablon transakcji i ostatecznie wysłaliśmy BSV. Teraz nauczymy się, jak sprawniej zarządzać UTXO, żebyśmy z automatu wiedzieli, ile mamy niewydanych transakcji, ile środków i na ile sobie możemy pozwolić, podczas ich wydawania.

bitcoin sc: bsv-sdk python utxo relax4000

Saldo i UTXO

W Bitcoin (BSV) saldo adresu nie istnieje w jednym miejscu, tylko jest sumą wszystkich niewydanych wyjść transakcji (UTXO - Unspent Transaction Outputs) przypisanych do tego adresu.

Nasz fragment kodu:

url = f"https://api.whatsonchain.com/v1/bsv/test/address/{address_testnet}/confirmed/balance"

pokazuje to saldo jako zagregowaną wartość w satoshi, ale naprawdę składa się ono z wielu osobnych UTXO, które pobieramy drugim wywołaniem:

url = f"https://api.whatsonchain.com/v1/bsv/test/address/{address_testnet}/unspent/all"

Nasze saldo to tylko wygodny widok na wszystkie UTXO a wywołanie jego adresu, po cichu przelicza listę UTXO i pokazuje je jako jedną liczbę.

Wcześniej nasz kod odwoływał się tylko do ostatniej niewydanej transakcji i pobierał jej hash, a teraz zakładamy sytuację, że otrzymaliśmy od kogoś kilka wpłat i chcemy wydać najwcześniejszą lub wydać 2, 3 albo wszystkie jednocześnie. 

Wygenerowałem sobie nowy klucz prywatny i adres i nazwałem to jako ADRES ODBIORCY, następnie z poprzedniego adresu (ADRES NADAWCY) wysłałem 3 transakcje:

  • transakcja nr 1 (2 wyjścia) - ADRES ODBIORCY, reszta do ADRESU NADAWCY
  • transakcja nr 2 (2 wyjścia) - ADRES ODBIORCY, reszta do ADRESU NADAWCY
  • transakcja nr 3 (3 wyjścia) - jakiś adres, ADRES ODBIORCY, reszta do ADRESU NADAWCY

Zaznaczyłem na czerwono wyjścia/wejścia ADRESU ODBIORCY: 0,0,1.

SPRAWDZANIE UTXO

Nasze niewydane transakcje sprawdzimy sobie poprzez API whatsonchain: 
 

Wynik tego kodu daje nam taki rezultat:

 

Widzisz, że na saldo 888 satoshi, składają się 3 transakcje a ich kolejność to 0,0,1. (najstarsza na górze). 

Teraz wystarczy dodać pętlę, która wyciągnie nam odpowiednie dane:

Wykonanie kodu daje taki rezultat:

Widzimy 3 niewydane utxo: 222, 333 i 333 satoshi, teraz chcemy wydać 400 satoshi.
Sprawdźmy co się stanie gdy użyjemy jednego UTXO z niewystarczającą liczbą satoshi:

Wykonanie kodu dało taki rezultat:


Co ciekawe pojawił się hash transakcji ale jego sprawdzenie nie zwróci żadnych szczegółów; transakcja w ogóle nie weszła do sieci więc hash, który widzisz, istnieje tylko lokalnie a nie w publicznej sieci.

Teraz musimy nieco przebudować nasz kod, żeby tak dobrać UTXO i indeksy, bo kwota była równa lub większa naszej kwocie do wydania ale na samym początku trochę praktyki:

 
Wykonanie powyższego kodu dało taki rezultat: 
 
 
Widzimy, że można w ten sposób dobrać odpowiednią kwotę i ilość UTXO.
W poprzednich przykładach, ręcznie wskazywałem jedno konkretne UTXO jako wejście transakcji. Teraz program sam wybierze kilka UTXO, które razem dadzą odpowiednią kwotę. W Pythonowym SDK dla BSV robi się to bardzo prosto - zamiast wywoływać add_input jeden raz, przechodzimy po liście wybranych UTXO i w pętli dokładamy kolejne wejścia. Dodatkowo jeszcze przed wywołaniem tx.sign() sprawdzamy opłatę i dodajemy warunek, czy wybrane UTXO + opłata pokrywaja naszą kwotę do_wydania .

Pełny kod:
 

Uruchamiamy kod i...

Możemy sprawdzić naszą transakcję, w której:
  • wydaliśmy 2 UTXO, na jeden adres (400 satoshi),
  • reszta wróciła do nas.

 

Po tych pięciu wpisach: 
  • potrafisz wygenerować klucz prywatny,
  • uzyskać klucz i adres publiczny,
  • sprawdzić saldo,
  • pobrać UTXO i uzyskać z nich HEX,
  • wysłać Bitcoina sobie lub komuś innemu i zwrócić resztę,
  • zarządzać UTXO i opłatami za transakcję 

Cześć!


Jeśli moje wpisy przypadły Ci do gustu i chcesz wesprzeć rozwój bloga, możesz postawić mi wirtualną kawę. Oczywiście, to całkowicie dobrowolne - blog i tak zawsze będzie dostępny za darmo. Dzięki za każde wsparcie, nawet to w formie dobrej energii! ☕😊



 **Gwarantuję Ci niezmienność moich treści**

Hash artykułu:

ID transakcji: sprawdź OP_RETURN i porównaj jego hash

Komentarze

Popularne posty

Discord kontra Forum – dlaczego Twój mózg tęskni za phpBB

Not Your Keys? – Krypto, Prawo i Wielkie Nieporozumienie

Cyfrowy minimalizm - mniej pingów, więcej spokoju