Tworzenie aplikacji Bitcoin SV z biblioteką BitSV

Tworzenie aplikacji Bitcoin SV z biblioteką BitSV

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/

zuku