Przejdź do głównej zawartości

Python bsv-sdk: sprawdzenie salda, pobranie UTXO

Bitcoin SV w Pythonie

W poprzednim wpisie wygenerowaliśmy klucz prywatny i poznaliśmy adres testnet i mainnet. Teraz czas na krok dalej - sprawdzimy sobie saldo i pobierzemy niewydane transakcje. Bedzie nam to potrzebne bo nauczymy się, jak przy pomocy oficjalnego bsv-sdk dla Pythona zbudować prostą transakcję, którą wyślemy na inny adres testnetowy. Dzięki temu nauczysz się podstaw działania transakcji Bitcoin SV, odwoływania się do UTXO, budowania wejść i wyjść, podpisywania i broadcastowania. Cały czas działamy na oficjalnej dokumentacji bsv-sdk i na poprzednim pliku (jeśli go nie masz, zapoznaj się z poprzednim wpisem), który utworzyliśmy wcześniej. W tym wpisie/lekcji zaczniemy używać też oficjalnego API whatsonchain - eksploratora bloków Bitcoin SV. 

Bitcoin SV - bsv-sdk saldo utxo

Krok 1: Importujemy niezbędne moduły 

import nest_asyncio
nest_asyncio.apply()
import asyncio
from bsv import PrivateKey, P2PKH, ARC, Transaction, TransactionInput, TransactionOutput
import requests
import json
 
Ten fragment kodu robi kilka ważnych rzeczy na styku Pythona i asynchronicznego programowania, a także importuje kluczowe elementy do pracy z Bitcoin SV SDK: 
 
import nest_asyncio
  • To biblioteka, która naprawia (patchuje) standardowy event loop Pythona, aby zezwolić na zagnieżdżone pętle zdarzeń.
  • Jest to przydatne, gdy chcesz uruchomić asynchroniczny kod (asyncio) w środowisku, gdzie event loop jest już uruchomiony (np. w notebookach Jupyter albo niektórych serwerach).
  • Bez tego patcha próba uruchomienia asyncio.run() w takich środowiskach, kończy się błędem "This event loop is already running"
nest_asyncio.apply()
  • To wywołanie nakłada ten patch, modyfikując event loop Pythona na aktualny kontekst, aby móc uruchamiać asynchroniczne funkcje wielokrotnie.
import asyncio
  •  Import biblioteki asynchronicznej programowania w Pythonie. Pozwala definiować funkcje asynchroniczne, wykonywać je, czekać na ich zakończenie.
from bsv import PrivateKey, P2PKH, ARC, Transaction, TransactionInput, TransactionOutput
 
To import elementów oficjalnego Python SDK dla Bitcoin SV, które umożliwiają:
  • PrivateKey - generowanie i obsługę kluczy prywatnych,
  • P2PKH - szablon standardowego skryptu blokującego typu Pay-to-PubKey-Hash,
  • ARC - moduł do łączenia się i broadcastowania transakcji do sieci BSV przez API,
  • Transaction, TransactionInput, TransactionOutput - tworzenie i operacje na transakcjach BSV.

import requests

  • Biblioteka, która służy do wygodnego wysyłania zapytań HTTP

import json

  • który służy do pracy z danymi w formacie JSON - format tekstowy przechowujący dane w strukturze klucz-wartość

Krok 2: Sprawdzimy saldo

Zadziałamy sobie na naszym poprzednio wygenerowanym kluczu prywatnym :) 

  • Zadeklaruj zmienną moj_klucz, jako string z kluczem prywatnym w formacie WIF.
moj_klucz = "L3LaQ7qvru....."  

  • Stwórz obiekt PrivateKey i wygeneruj z niego adres publiczny (będzie taki jak poprzednio - chyba, że wygenerowałeś sobie nowy klucz)
klucz_prywatny = PrivateKey(moj_klucz)
address_testnet = klucz_prywatny.address(network = "testnet")

  • Zbuduj URL do API WhatsOnChain dla sprawdzenia ilości potwierdzonych transakcji, na adresie testnet.
  • Wyślij żądanie GET za pomocą requests.get() i parsuj odpowiedź JSON.
  • Wyciągnij wartość salda w satoshi.

url = f"https://api.whatsonchain.com/v1/bsv/test/address/{address_testnet}/confirmed/balance"
response = requests.get(url)
data = response.json()
saldo = data['confirmed']

  • Wypisz adres i saldo (w dwóch wariantach).

print(f"Adres testnet : {address_testnet}")
print(f"Saldo : {saldo} satoshi / {saldo / 100000000} BSV")

Zapisz kod i uruchom, wynikiem powinno być coś podobnego:


Krok 3: Pobierzmy niewydane UTXO

Świetnie, mamy jakieś satoshi do wydania :) Teraz uaktualniamy nasz kod. Tak jak w poprzednim kroku, wykorzystamy API whatsonchain, do pobrania niewydanych transakcji UTXO a następnie zwrócimy sobie z niego surowy heksadecymalny kod transakcji. Ten (hex) jest potrzebny, żeby zbudować naszą pierwszą transakcję. 

url = f"https://api.whatsonchain.com/v1/bsv/test/address/{address_testnet}/unspent/all"
response = requests.get(url)
data = response.json()
txid = data['result'][0]['tx_hash']
print(f"Transakcja z niewydanym UTXO: {txid}")

Powyższy kod:

  • Wysyła żądanie GET do endpointu /unspent/all, który zwraca wszystkie niewydane UTXO (środki gotowe do wydania) dla naszego adresu testnet.
  • Parsuje odpowiedź JSON i wyciąga tx_hash (identyfikator transakcji) pierwszego UTXO z tablicy data['result'][0].
  • Wyświetla txid transakcji, która zawiera niewydane środki
A ten poniższy kod, pobiera surowe dane transakcji Bitcoin SV w formacie hex dla konkretnego txid, którego wcześniej sprawdziliśmy.

url = f"https://api.whatsonchain.com/v1/bsv/test/tx/{txid}/hex"
response = requests.get(url)
tx_hex = response.text
print(f"HEX : {tx_hex}")

Zapisz kod i uruchom, wynikiem powinno być coś podobnego:

Hex utxo bsv-sdk

Pełny kod: 
import nest_asyncio
nest_asyncio.apply()
import asyncio
from bsv import PrivateKey, P2PKH, ARC, Transaction, TransactionInput, TransactionOutput
import requests
import json

moj_klucz = "L3LaQ7qvruqKcfte..."
klucz_prywatny = PrivateKey(moj_klucz)
address_testnet = klucz_prywatny.address(network = "testnet")

url = f"https://api.whatsonchain.com/v1/bsv/test/address/{address_testnet}/confirmed/balance"
response = requests.get(url)
data = response.json()
saldo = data['confirmed']

print(f"Adres testnet : {address_testnet}")
print(f"Saldo : {saldo} satoshi / {saldo / 100000000} BSV")

url = f"https://api.whatsonchain.com/v1/bsv/test/address/{address_testnet}/unspent/all"
response = requests.get(url)
data = response.json()
txid = data['result'][0]['tx_hash']
print(f"Transakcja z niewydanym UTXO: {txid}")

url = f"https://api.whatsonchain.com/v1/bsv/test/tx/{txid}/hex"
response = requests.get(url)
tx_hex = response.text
print(f"HEX : {tx_hex}")
 
Ok, to co już mamy?
  • wygenerowany klucz prywatny,
  • uzupełnione saldo za pomocą kranu testnet,
  • sprawdzone saldo z poziomu kodu (a nie poprzez explorer bloków na stronie www),
  • ustalone niewydane UTXO
  • pobrany hex z powyższego UTXO 

Co dalej?

W kolejnym wpisie, pokażę Ci jak zbudować i wysłać swoją pierwszą transakcję w Bitcoin SV na testnecie, przy użyciu Pythona i bsv-sdk. Nauczysz się wtedy łączyć klucze, korzystać z UTXO, ustawiać adresy odbiorców, podpisywać i rozgłaszać transakcje. Do kolejnej lekcji, przygotuj sobie klucz API, który możesz pobrać ze strony https://platform.teranode.group



Jeśli moje wpisy przypadły Ci do gustu i chcesz wesprzeć rozwój bloga, możesz postawić mi wirtualną kawę (GGwallet czeka!). 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

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

Not Your Keys? – Krypto, Prawo i Wielkie Nieporozumienie