Przejdź do głównej zawartości

Python Bitcoin bsv-sdk: transakcje część II

Bitcoin SV w Pythonie

W poprzednich wpisach ( 1, 2, 3 ) 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 do siebie. Teraz nauczymy się, jak przy pomocy oficjalnego bsv-sdk dla Pythona zbudować transakcję, którą wyślemy komuśinnemu a resztę zwrócimy sobie. Cały czas działamy na naszym pliku; jeśli go nie masz, wróć do wpisu z części III.

Python Bitcoin programowanie bsv-sdk

METODA I

Krok 0: zadeklaruj adres odbiorcy

Zmienną wstaw przed rozpoczęciem funkcji asynchronicznej. Jeśli chcesz, aby wartość tej zmiennej była podawana dynamicznie, możesz pobrać ją za pomocą funkcji input()
 
odbiorca = 'mnai8LzKea5e3C9qgrBo7JHgpiEnHKMhwR'

To jest adres osoby, do której wysyłasz BSV. W moim przykładzie podałem adres kranu testnet https://scrypt.io/faucet/

Krok 1: Pierwszy output - reszta dla Ciebie

Nasz input z poprzedniego wpisu pozostaje bez zmian, jest na ten moment wystarczająco dobry (pobiera UTXO i jego indeks) ; zajmiemy się teraz budowaniem pierwszego wyjścia. Spójrz na ten kod i lekko zmodyfikuj poprzedni.
tx_output = TransactionOutput(
locking_script=P2PKH().lock(address_testnet),
change= True
    )

Tutaj pozbyliśmy się zmiennej satoshis ; w parametrach mamy jedynie nasz adres address_testnet oraz zmienną  change= True ,która zwróci nam resztę. Tworzysz tutaj locking script typu P2PKH na własny adres, czyli mówisz: "to wyjście należy do mnie, mogę je wydać, bo mam do niego klucz prywatny".

Krok 2: Output do odbiorcy - faktyczna płatność

tx_output_1 = TransactionOutput(
     locking_script=P2PKH().lock(odbiorca),
    satoshis=do_wyslania,
     change= False
    )


To jest drugi output - prawdziwa płatność. Tworzysz locking script P2PKH na adres odbiorcy, od tego momentu UTXO, które tu powstanie, będzie mógł wydać tylko ten, kto ma klucz prywatny do mnai8Lz..
Kolejno mamy zmienną do_wyslania , ta wartość jest sztywna ale możesz ją też podać dynamicznie za pomocą funkcji input() No i ważne, ten output nie jest outputem na resztę, dlatego change= False

Krok 3: Składanie transakcji

tx = Transaction([tx_input], [tx_output, tx_output_1], version=1)
print( f"{address_testnet} wysyła {do_wyslania} satoshi do {odbiorca}" )
 
Tworzysz obiekt   Transaction z listą wejść i wyjść; print to nasza informacja, co się dzieje.
Cała reszta pozostaje bez zmian. 

Teraz zapisz i uruchom kod:
 
bsv-sdk python
Wysłaliśmy 333 satoshi na adres mnai8LzKea5e3C9qgrBo7JHgpiEnHKMhwR, reszta wróciła do nas, możemy też sprawdzić transakcję w blockchain: TUTAJ.

Python bsv-sdk

METODA II

W przeciwieństwie do poprzedniej metody, gdzie podawałeś wszystko w konstruktorze Transaction([...], [...])) , tutaj najpierw tworzysz pustą transakcję, a potem dokładasz do niej klocki jeden po drugim. To świetny sposób na naukę, bo widać dokładnie kolejność działań. Przeanalizuj ten kod z tym co już masz i zobacz różnice:
async def create_and_broadcast_transaction():
    tx = Transaction()

    tx.add_input(TransactionInput(
        source_transaction=Transaction.from_hex(tx_hex),
        source_output_index=tx_pos,
        unlocking_script_template=P2PKH().unlock(klucz_prywatny)))

    tx.add_output(TransactionOutput(
            locking_script=P2PKH().lock(odbiorca),
            satoshis=do_wyslania))

    tx.add_output(TransactionOutput(
        locking_script=P2PKH().lock(address_testnet),
        change=True ))
 
     tx.fee()
    tx.sign()
 
Zaczynasz od czystej kartki tx = Transaction()
tx to teraz pusty obiekt transakcji: nie ma wejść (kto płaci?), nie ma wyjść (komu płacimy?) 
Później używasz metody .add_input(...) na obiekcie tx oraz .add_output(...)

Obie metody robią to samo pod maską. Ta metoda jest często łatwiejsza do zrozumienia dla początkujących, bo przypomina budowanie z klocków LEGO po kolei.

Metoda I: Tworzysz wszystko naraz, gdy masz już gotowe listy inputów/outputów.
Metoda II: widzisz proces i możesz dynamicznie dodawać elementy w pętli.
 
Po tych czterech wpisach znasz podstawy podstaw: 
  • potrafisz wygenerować klucz prywatny,
  • uzyskać klucz i adres publiczny,
  • sprawdzić saldo,
  • pobrać UTXO i uzyskać z niej HEX,
  • wysłać Bitcoina sobie lub komuś innemu i zwrócić resztę.
To co dalej? Czy to wszystko co potrafimy zrobić na tym słynnym Bitcoinie? 
Ha! To zależy o którym mówimy - o BTC czy o BSV (tym oryginalnym, na którym tu piszemy).
To jak porównywanie dwóch światów, które teoretycznie mają wspólnego przodka, ale po latach poszły w tak odmienne strony, że dziś nie wiadomo, czy powinny jeszcze używać tego samego nazwiska ale o tym... przeczytasz w kolejnym wpisie.

Cześć!


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

Prześlij komentarz

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