Poznaj środowisko deweloperskie w którym język programowania Python w połączeniu z biblioteką BitSV, stwarza system do komunikacji z siecią Bitcoin SV. Pozwala on w łatwy sposób tworzyć klucze, odczytywać salda, wysyłać transakcje jak i zapisywać treści do blockchain.
BitSV jest szybki, wszechstronny, łatwy w użyciu i kompatybilny z wieloma systemami operacyjnymi i wersjami Pythona. Obsługuje różne formaty kluczy prywatnych, a co waże pozwala również na przechowywanie danych w łańcuchu bloków. Dzięki wymienionym cechom, lekkie środowisko staje się potężnym narzędziem w rękach programistów.
Tworzenie klucza prywatnego
BitSV umożliwia generowanie kluczy prywatnych, które są niezbędne do tworzenia i podpisywania transakcji. Z tego powodu powinieneś zachować to w tajemnicy. A jeśli naprawdę chcesz samodzielnie wygenerować klucz, warto wygenerować go w bezpieczny sposób.
Formalnie klucz prywatny to seria 32 bajtów. Obecnie istnieje wiele sposobów zapisywania tych bajtów. Może to być ciąg 256 jedynek i zer lub inny ciąg np. binarny, czy ciąg Base64, jak również klucz WIF, fraza mnemoniczna lub wreszcie ciąg szesnastkowy.
Użyję kryptograficznie silnego generatora RNG (Random Number Generator) do wygenerowania liczby losowej, który jest odpowiedni do użycia w kryptografii.
Do pomocy wykorzystam artykuły xp_analyst z Bitcoin SV Polska, który napisał, jak zacząć programować w Python: “Koduj z Pythonem w Bitcoin SV – cz.1”; oraz jak bezpiecznie wygenerować silne hasło przy użyciu modułu secrets w artukule: “Pythonuj w Bitcoin SV – cz.2”.
Dodatkowo, w poniższym przykładzie użyję modułu json aby wyświetlać dane w popularnym standardzie JSON.
#Python
import json
import bitsv
import secrets
# Generowanie losowego ciągu tekstowego w formacie szesnastkowym (32 bajty)
random_hex_number = secrets.token_hex(32)
# Tworzenie klucza i eksportowanie go do formatu WIF (Wallet Import Format)
key = bitsv.PrivateKey.from_hex(random_hex_number)
key_wif = key.to_wif()
# Generowanie adresu BitcoinSV z klucza prywatnego
new_address = key.address
# Zebranie danych
data = {
"key_wif": key_wif,
"new_address": new_address
}
json_data = json.dumps(data, indent=4)
# Wyświetlenie danych
print(json_data)
# JSON
# {
# "key_wif": "L5kxV99eBF1t51wvFgPQeyyu5u6myKTn7hc97dcuhLq9ZonP2Yjt",
# "new_address": "1FF99awij7e4v7pYo7xtNbFy7swWEVfmFV"
# }
Powyższy skrypt generuje losowy ciąg znaków, który staje się kluczem prywatnym. Pamiętaj, że klucze prywatne są tajne i nie powinny być udostępniane. Każdy, kto posiada klucz prywatny, ma pełną kontrolę nad powiązanymi z nim Bitcoinami.
Dodatkowo, zostaje utworzy adres publiczny twojego portfela. Na ten adres można bezpiecznie wysyłać Bitcoiny, dlatego można go upubliczniać.
Sprawdzanie stanu konta
Znając tylko adres portfela, nie da się wysłać zgromadzonych na nim Bitcoinów, jest on publiczny i można bez problemu sprawdzić jego stan na stronie WhatsOnChain.com.
https://whatsonchain.com/address/1FF99awij7e4v7pYo7xtNbFy7swWEVfmFV
Dzięki temu, że wygenerowałem klucz prywatny i wyeksportowałem go w formacie WIF, będę mógł w każdej chwili wygenerować transakcję, czy sprawdzić stan konta.
W pierwszej kolejności swój klucz prywatny wykorzystam do skryptu Python, żeby sprawdzić stan konta.
#Python
import json
from bitsv import PrivateKey
# Klucz prywatny w formacie WIF
private_key_wif = 'L5kxV99eBF1t51wvFgPQeyyu5u6myKTn7hc97dcuhLq9ZonP2Yjt'
# Odtworzenie klucza prywatnego
key = PrivateKey(private_key_wif)
# Zebranie danych
data = {
"address": key.address,
"satoshi": key.get_balance('satoshi'),
"bsv": key.get_balance('bsv'),
"usd": key.get_balance('usd'),
"pln": key.get_balance('pln')
}
# Wyświetlenie danych
json_data = json.dumps(data, indent=4)
print(json_data)
# JSON
# {
# "address": "1FF99awij7e4v7pYo7xtNbFy7swWEVfmFV",
# "satoshi": "199602",
# "bsv": "0.00199602",
# "usd": "0.1",
# "pln": "0.42"
# }
Powyższy skrypt wyświetli salda w różnych walutach i jest wstępem do kolejnego, który jest jego rozwinięciem.
W kolejnym skrypcie wyślemy niewielką ilość Bitcoinów na inny adres.
#Python
import json
import bitsv
# Klucz prywatny w formacie WIF z którego wysyłam
sender_private_key_wif = 'L5kxV99eBF1t51wvFgPQeyyu5u6myKTn7hc97dcuhLq9ZonP2Yjt'
# Waluta oraz ilość do wysyłania
currency = 'satoshi'
amount_to_send = '10648'
# Adres portfela na który wysyłam BSV
receiver_address = '1Bj3JN4dUdLS771V61t2TRtYXeNcwHPnW5'
# Odtworzenie klucza prywatnego
private_key = bitsv.Key(sender_private_key_wif)
# Przygotowanie transakcji
outputs = [(receiver_address, amount_to_send, currency)]
# Wykonaj transakcję i zapisz jej ID
try:
data = {
"txid": private_key.send(outputs)
}
except Exception as e:
data = {
"error": str(e) # Konwersja wyjątku na ciąg znaków
}
# Wyświetlenie danych
json_data = json.dumps(data, indent=4)
print(json_data)
# JSON
# {
# "txid": "11eccc0b8127a0d8f470e3551c8bcd783a01a2b40f2911e4e2e532d0c473000c"
# }
Po wykonaniu skrypt zwróci TXID transakcji. Dzięki temu identyfikatorowi można śledzić status transakcji na stronie WhatsOnChain.com.
https://whatsonchain.com/tx/11eccc0b8127a0d8f470e3551c8bcd783a01a2b40f2911e4e2e532d0c473000c
W następnym artykule przedstawię kolejne możliwości modułu BitSV.
Podziękowania
Warto jeszcze wspomnieć i podziękować twórcą za swój wkład w rozwój oraz poprawę modułu.
BitSV jest rozwidleniem biblioteki Pythona do obsługi Bitcoin SV napisanej przez Bita Ofeka. Aktualni opiekunowie to doświadczeni programiści AustEcon, Teran-McKinney i Jozue-S. Jest też wielu współpracowników, a wśród nich są min. Ofek Lev, Joshua Smith, Shawn A. Wilson i inni.
Wielkie dzięki!
Pełną dokumentację znajdziesz tutaj: https://austecon.github.io/bitsv/