Korzystaj z potencjału sieci i używaj OP_RETURN

Korzystaj z potencjału sieci i używaj OP_RETURN

Ciekawa historia kryje się za specjalnym typem wyjścia transakcji, znanym jako kod operacji OP_RETURN. Jest to temat, który rozpala emocje i dzieli społeczności Bitcoin SV, BCH i BTC. Niektórzy uważają, że przechowywanie dowolnych danych w łańcuchu bloków to zły pomysł i nie do tego został on stworzony. Na szczęście, deweloperzy Bitcoin SV nie podzielają tego zdania, a statystyki dostępne online pokazują jaka jest rzeczywistość.

Duży może więcej

Maksymalny rozmiar danych dla poszczególnych Bitcoinów:

	Bitcoin BTC       80 bajtów =   0,08 KB 
	Bitcoin BCH      220 bajtów =   0,22 KB 
	Bitcoin BSV   100000 bajtów = 100    KB 

Matematyki nieoszukamy i jeśli sprawdzimy proporcje, to Bitcoin Cash pozwala na zapisanie 175% więcej danych w OP_RETURN niż Bitcoin Core, a Bitcoin SV pozwala na zapisanie 127900% więcej danych niż Bitcoin Core i 46454% więcej danych niż Bitcoin Cash.

Bitcoin SV, pomimo swojej dużej pojemności i funkcjonalności, jest również niezwykle tani. To aspekt często niedoceniany przez przeciwników orginalnego Bitcoina. Kiedy zadałem pytanie na forum, gdzie mogę zdobyć darmowe Bitcoiny w sieci testowej do przeprowadzenia testów, otrzymałem sakrastyczną odpowiedź, że po co, jak wszyscy testują na produkcyjnym blockchainie. Transakcje w sieci Bitcoin SV są naprawdę tanie. Sprawdźmy to sami.

Poznaj więcej funkcji BitSV

Zanim zaczniemy pracować z OP_RETURN, przygotujemy skrypt tak, aby można go było testować zarówno w sieci produkcyjnej, jak i testowej. Dzięki temu zaoszczędzimy trochę Bitcoinów podczas testowania naszej aplikacji. Aby przełączyć się między sieciami, wystarczy podać nazwę sieci jako argument funkcji .NetworkAPI(). Jeśli nie podamy argumentu, domyślnie połączymy się z główną siecią.

Wszystkie dostępne funkcje znajdziesz tutaj: https://austecon.github.io/bitsv/dev/api.html

Na tej stronie zdobędziesz darmowe Bitcoiny (w sieci testowej): https://witnessonchain.com/faucet/tbsv

Zatem obliczmy kosz transakcji. BitSV daje nam możliwość pobrania informacji o koszcie rekomendowanej opłaty za bajt w satoshi. W zależności od prędkości z którą chcesz, aby Twoja transakcja została przetworzona, możesz wybrać 3 opcje: fast (2 Satoshi/B), medium (1 Satoshi/B) lub slow (0,5 Satoshi/B).

#Python 
import json 
import bitsv 

# Rozmiar transakcji mierzony w bajtach 
#transaction_size_b = 80     # pojemoność BTC 80B 
#transaction_size_b = 220    # pojemoność BCH 220B 
#transaction_size_b = 100000 # pojemoność BSV 100KB 
transaction_size_b = 1000   # TX BSV średnio nie przekracza 1KB

# Stworzenie obiektu 
api = bitsv.network.services.NetworkAPI('main') 
#api = bitsv.network.services.NetworkAPI('test') 

# Pobranie informacji o koszcie opłaty za bajt w satoshi 
fee_satoshi_per_byte_fast = bitsv.network.get_fee(speed='fast')
fee_satoshi_per_byte_medium = bitsv.network.get_fee(speed='medium')
fee_satoshi_per_byte_slow = bitsv.network.get_fee(speed='slow')

# Obliczenie opłaty za transakcję
fee_fast_satoshi = round(fee_satoshi_per_byte_fast * transaction_size_b)
fee_medium_satoshi = round(fee_satoshi_per_byte_medium * transaction_size_b)
fee_slow_satoshi = round(fee_satoshi_per_byte_slow * transaction_size_b)

# Przekonwertowanie na inna walutę 
fee_fast_bsv = fee_fast_satoshi / 100000000 
fee_fast_pln = bitsv.network.satoshi_to_currency(fee_fast_satoshi, 'pln'); 
fee_fast_usd = bitsv.network.satoshi_to_currency(fee_fast_satoshi, 'usd'); 
fee_medium_bsv = fee_medium_satoshi / 100000000 
fee_medium_pln = bitsv.network.satoshi_to_currency(fee_medium_satoshi, 'pln'); 
fee_medium_usd = bitsv.network.satoshi_to_currency(fee_medium_satoshi, 'usd'); 
fee_slow_bsv = fee_slow_satoshi / 100000000 
fee_slow_pln = bitsv.network.satoshi_to_currency(fee_slow_satoshi, 'pln'); 
fee_slow_usd = bitsv.network.satoshi_to_currency(fee_slow_satoshi, 'usd'); 

# Zebranie danych  
data = {
    "fee_satoshi_per_byte_fast": fee_satoshi_per_byte_fast,
    "fee_satoshi_per_byte_medium": fee_satoshi_per_byte_medium,
    "fee_satoshi_per_byte_slow": fee_satoshi_per_byte_slow,
    "fast_speed_fee_satoshi": fee_fast_satoshi, 
    "fast_speed_fee_bsv": fee_fast_bsv, 
    "fast_speed_fee_pln": fee_fast_pln, 
    "fast_speed_fee_usd": fee_fast_usd, 
    "medium_speed_fee_satoshi": fee_medium_satoshi, 
    "medium_speed_fee_bsv": fee_medium_bsv, 
    "medium_speed_fee_pln": fee_medium_pln, 
    "medium_speed_fee_usd": fee_medium_usd, 
    "slow_speed_fee_satoshi": fee_slow_satoshi, 
    "slow_speed_fee_bsv": fee_slow_bsv, 
    "slow_speed_fee_pln": fee_slow_pln, 
    "slow_speed_fee_usd": fee_slow_usd 
} 

# Wyświetlenie danych
json_data = json.dumps(data, indent=4)
print(json_data) 

# JSON size 100KB 
# {
#    "fee_satoshi_per_byte_fast": 2,
#    "fee_satoshi_per_byte_medium": 1,
#    "fee_satoshi_per_byte_slow": 0.5,
#    "fast_speed_fee_satoshi": 2000, 
#    "fast_speed_fee_bsv": "0.00002000", 
#    "fast_speed_fee_pln": "0", 
#    "fast_speed_fee_usd": "0", 
#    "medium_speed_fee_satoshi": 1000, 
#    "medium_speed_fee_bsv": "0.00001000", 
#    "medium_speed_fee_pln": "0", 
#    "medium_speed_fee_usd": "0", 
#    "slow_speed_fee_satoshi": 500, 
#    "slow_speed_fee_bsv": "0.00000500", 
#    "slow_speed_fee_pln": "0", 
#    "slow_speed_fee_usd": "0" 
# } 

Jeśli przeanalizujemy transakcje w sieci Bitcoin SV, zauważymy, że zazwyczaj ich rozmiar nie przekracza 1KB. Dlatego w powyższym przykładzie obliczyliśmy koszt wykonania transakcji, zakładając, że jej rozmiar wynosi 1000 bajtów.

Z obliczeń wynika, że jedna transakcja kosztuje 1000 Satoshi, to jest $0,002 czyli 0,008zł. To za 1 zł jesteśmy w stanie wykonać około 120 transakcji.

OP_RETURN to takie proste

Zapis danych do blockchaina jest bardzo prosty. Tworzymy transakcję, dodajemy dane do OP_RETURN, a następnie podpisujemy ją kluczem prywatnym, aby wysłać i utrwalić wszystko w sieci.

#Python 

import json  
from bitsv import PrivateKey  

# Klucz prywatny w formacie WIF 
private_key_wif = 'L5kxV99eBF1t51wvFgPQeyyu5u6myKTn7hc97dcuhLq9ZonP2Yjt'#4public 

# Treść do wysłania 
op_return_str = ' Bitcoin SV Polska ' 

# Odtworzenie klucza prywatnego 
key = PrivateKey(private_key_wif) 

# Przygotowanie OP_RETURN 
op_return_data = b''.join([ 
	bytes.fromhex('6d01'), 
    op_return_str.encode('utf-8') 
]) 

# Wykonaj transakcję i zapisz jej ID 
try: 
    data = { 
        "txid": key.send(outputs=[], message=op_return_data, custom_pushdata=True) 
    } 
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": "955d5acff299a3906b563aeb96cb1ce0addfb4e7b260e9979e260f2218b9d1fd" 
# }

Po wykonaniu skryptu otrzymasz identyfikator transakcji (TXID). Dzięki temu identyfikatorowi możesz sprawdzić status transakcji oraz zawartość OP_RETURN.

https://whatsonchain.com/tx/955d5acff299a3906b563aeb96cb1ce0addfb4e7b260e9979e260f2218b9d1fd

Następny krok to zdobycie umiejętności odczytywania danych zapisanych w blockchainie, ale to już innym razem.

Podsumowując

Sieć Bitcoin SV oferuje niezwykłe możliwości dla deweloperów i użytkowników. Dzięki dużej pojemności OP_RETURN i niskim kosztom transakcji, Bitcoin SV umożliwia przechowywanie danych w sposób ekonomiczny. To otwiera drzwi do wielu zastosowań, od prostych transakcji finansowych, po zaawansowane aplikacje z wykorzystaniem danych przechowywanych na blockchainie.

Testuj swoje aplikacje w sieci testowej przed przejściem do sieci produkcyjnej. Dzięki temu upewnisz się że wszystko działa poprawnie i zaoszczędzisz swoje Satoshi.

Pamiętaj! Satoshi do Satoshi daje Bitcoina :)

Mam nadzieję, że ten artykuł pomógł Ci zrozumieć, jak skorzystać z możliwości biblioteki BitSV i potencjału sieci Bitcoin z kodem operacji. Jeśli masz jakiekolwiek pytania lub potrzebujesz dalszej pomocy, śmiało pytaj.

Znajdziesz nas na oficjalnym kanale: Discord BitcoinSV Polska

zuku