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ść!


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

Hash artykułu:

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

Komentarze

  1. Anonimowy13/1/26 15:20

    Współczesna dostępność cyfrowa to standard projektowania zasobów internetowych w taki sposób, aby mogły z nich swobodnie korzystać osoby o różnych potrzebach, w tym osoby z niepełnosprawnościami. Implementacja wytycznych WCAG pozwala na usunięcie barier technologicznych, co umożliwia osobom niedowidzącym, niesłyszącym czy z ograniczeniami ruchowymi pełny dostęp do informacji i usług online. Obowiązek wdrażania tych rozwiązań spoczywa przede wszystkim na podmiotach publicznych, jednak coraz więcej firm prywatnych decyduje się na ten krok, dbając o inkluzywność i szeroki zasięg swoich serwisów. Poprawa czytelności treści, odpowiedni kontrast oraz możliwość nawigacji za pomocą klawiatury to kluczowe elementy budujące przyjazne środowisko cyfrowe dla każdego użytkownika.

    OdpowiedzUsuń
    Odpowiedzi
    1. Wezmę ten komentarz pod uwagę i wszystkie sekcje kodu wraz z opisem zostaną udostępnione na github w niedalekiej przyszłości (2-3 tygodnie). Pozdrawiam i przepraszam za niedogodności.

      Usuń

Prześlij komentarz

Popularne posty

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

Status w życiu: confirmed. Dobra, super, a co dalej?

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