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.
Krok 1: Importujemy niezbędne moduły
nest_asyncio.apply()
import asyncio
from bsv import PrivateKey, P2PKH, ARC, Transaction, TransactionInput, TransactionOutput
- 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"
- To wywołanie nakłada ten patch, modyfikując event loop Pythona na aktualny kontekst, aby móc uruchamiać asynchroniczne funkcje wielokrotnie.
- Import biblioteki asynchronicznej programowania w Pythonie. Pozwala definiować funkcje asynchroniczne, wykonywać je, czekać na ich zakończenie.
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
- Zadeklaruj zmienną moj_klucz, jako string z kluczem prywatnym w formacie WIF.
- Stwórz obiekt PrivateKey i wygeneruj z niego adres publiczny (będzie taki jak poprzednio - chyba, że wygenerowałeś sobie nowy 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
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
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:
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}")
- 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
**Gwarantuję Ci niezmienność moich treści**
Hash artykułu:
ID transakcji: sprawdź OP_RETURN i porównaj jego hash
Komentarze
Prześlij komentarz