Przejdź do głównej zawartości

Python Bitcoin bsv-sdk: R-Puzzle

R-Puzzle, czyli bitcoin bez pytania "kim jesteś?"

Normalny Bitcoin jest strasznie grzeczny. Monety są przypięte do utxo, utxo do adresów, adresy do kluczy, klucze do właścicieli. Chcesz wydać środki? Proszę bardzo, pokaż klucz prywatny. Bitcoin (BSV) pozwala jednak zajrzeć głębiej pod maskę. Okazuje się, że podpis, który zwykle traktujemy jak czarną skrzynkę, składa się z konkretnych liczb. Jedna z nich nazywa się R; zwykle nikogo ona nie interesuje - jest jak numer seryjny śruby w silniku - musi być, ale nikt o niej nie rozmawia ale kiedyś, ktoś wpadł na pomysł: a gdyby zrobić z niej klucz do sejfu?

RPuzzle

Zamiast więc mówić blockchainowi:

"Te monety należą do tego konkretnego klucza prywatnego"

mówimy:

"Te monety może wydać ten, kto zna sekret"

To trochę jak zostawienie szklanej skrzyni ze złotem na środku placu i kartki z napisem, że można sobie wziąć zawartość jeśli zna się kod do skrzyni. W poprzednich wpisach pythona i bsv-sdk, gdy wydawaliśmy nasze satoshi, zawsze wskazywaliśmy adres odbiorcy i tylko odbiorca mógł wydać środki.

transakcja bitcoin zwykla

W przypadku R-Puzzle, własność przestaje być przypisana do konkretnego adresu i klucza prywatnego. Tutaj nasze satoshi po wysłaniu transakcji po prostu czekają w skrypcie - naszym szklanym sejfie - nie na kogoś konkretnego, tylko na tego kto wie, jak go odblokować.

transakcja r-puzzle

To otwiera drzwi do wielu nowych pomysłów, konkursów, gier, nagród dla pierwszego rozwiązującego, kontraktów, w których kontrolę przekazuje się sekretem, a nie kluczem prywatnym. Możesz nawet tak zaprojektować zagadkę, że Ty sam nie znasz wyniku rozwiązania, ale znasz jego ślad. Tak przy okazji tego wpisu, wpadł mi do głowy pewien przyziemny przykład, na zastosowanie R-Puzzle :)

Dzisiejszy świat gier jest ekonomicznie nudny. Kupujesz grę, przechodzisz ją w 100%, spędzasz godziny na eksploracji, pokonujesz bossów, zdobywasz wszystkie osiągnięcia.. i nic. Satysfakcja? Jakaś jest ale materialnej nagrody brak.

Wyobraź sobie grę, w której boss nie tylko "zrzuca loot" ale robi to naprawdę. Pokonujesz go po raz setny, w końcu wypada rzadka rzecz - miecz, artefakt, cokolwiek. Tylko że tym razem to nie jest kolejny piksel w ekwipunku. Gra automatycznie uruchamia skrypt w blockchainie. Skrypt mówi: jeśli istnieje transakcja, w której pojawi się dokładnie ta rzadka rzecz - to odblokuj dodatkowe środki. Na przykład część pieniędzy, które gracz zapłacił za grę, albo pulę nagród przygotowaną przez twórców. Gracz nie musi nic zgłaszać, nie musi pisać do supportu, nie musi udowadniać, że "naprawdę mu wypadło". Blockchain widzi fakt i spełniony warunek == nagroda wypłacona.

Python - skrypt nadawcy R-Puzzle

No dobra, to skoro wiemy jak działa R-Puzzle, to teraz przejdźmy do praktyki.

Szkielet naszego kodu jest taki sam jak ten z tego wpisu; dlatego jeżeli go nie masz, to skopiuj go sobie, nie zapomnij zamienić klucza prywatnego na własny (+ doładować adres testnet jeśli nie masz satoshi).

Musimy zaimportować dodatkowe klasy z naszego bsv-sdk; to wszystko co powinniśmy mieć:

import modulow bsv-sdk

W kolejnym kroku, musimy utworzyć nową klasę RPuzzle. Ja wziąłem gotowca z przykładu na githubie (bsv-sdk):

class RPuzzle

Teraz stworzymy transakcję w której wyślemy 777 satoshi na nasz "szklany sejf", gdzie tajnym hasłem odblokowującym będzie liczba "k", wyprowadzona z przypadkowego klucza prywatnego.

transakcja R-Puzzle

Teraz zapisujemy i uruchamiamy skrypt.. 

wyslanie transakcji rpuzzle

Widzimy poprawne rozgłoszenie w sieci oraz wypisaną tajną liczbę "k" (To jest do zapisania), którą posłużymy się przy odbiorze naszych 777 satoshi. Sprawdźmy w eksploratorze blockchain, jak wygląda zbudowana transakcja, na co tak naprawdę ją wydaliśmy, skoro nie podawałem adresu odbiorcy.

transakcja whatsonchain

Kwota 777 satoshi siedzi sobie w skrypcie ScriptHash, a reszta wróciła do nas.

Python - skrypt odbiorcy R-Puzzle.

Teraz odbierzemy 777 satoshi. Wiedząc, że nie były wysłane na konkretny adres i nie są kontrolowane przez żaden klucz prywatny, wygeneruję losowo nowy pusty adres i odbiorę satoshi za pomocą naszego hasła (liczby "k"). 

Z poprzedniego kodu (nadawca) skopiuj sobie wszystkie importy i klasę RPuzzle i przepisz poniższy kod. Zastąp zmienną "tx_r" swoją transakcją a "k" - swoją tajną liczbą.

odbiorca rpuzzle

Wypisałem kod na szybko:

rezultat odbiorca rpuzzle

A teraz piszemy transakcję odbierającą:

rpuzzle odebranie transakcji

Zapisuję i wykonuję kod:

wykonanie kodu rpuzzle

Teraz sprawdźmy w blockchain, jak wygląda nasza odebrana transakcja:

transakcja odbierajaca rpuzzle

Idealnie; wygenerowaliśmy sobie nowy adres i za pomocą sekretnej liczby "k", odebraliśmy środki na losowo wygenerowany adres. Nawet nie musieliśmy mieć środków na pokrycie tej transakcji - sama się pobrała z tego co odbieraliśmy.

Gdybym miał graficznie pokazać różnice takiej transakcji RPuzzle do klasycznej? 

  • Klasycznie wysyłamy środki na adres odbiorcy i tylko on może odblokować środki = tylko jego klucz prywatny.
  • W R-Puzzle wysyłamy środki do sejfu i każdy kto zna lub odgadnie hasło, może odebrać środki.
przypomnienie porownanie rpuzzle

R-Puzzle pozwala wydać monety nie kluczem prywatnym, lecz samą wiedzą o sekrecie. To nie jest żadna magia ani "hack Bitcoina" = po prostu Bitcoin (BSV). (*BTC vs BSV - różnice)

Społeczność BTC mówi "a po co to komu?" Od lat boi się własnego skryptu jak dziecko piwnicy. Każdy pomysł, który wykracza poza "kup, trzymaj i nie ruszaj", jest traktowany jak zagrożenie systemowe i najlepiej w ogóle nieużywany. W Bitcoin (BSV) jest inaczej - okazuje się, że może być czymś więcej niż cyfrową skarbonką, której nie wolno potrząsnąć. I trochę boli tych, którzy woleliby, żeby Bitcoin był prosty, nudny i najlepiej nieużywany.

No cóż.. kurtyna kiedyś opadnie a król będzie nagi..

PS. Jeśli chcesz wrócić do prostszych przykładów z programowaniem bitcoin, to znajdziesz je w sekcji wszystkie wpisy.

Cześć!


Jeśli moje wpisy przypadły Ci do gustu i chcesz wesprzeć rozwój bloga, możesz postawić mi wirtualną kawę. 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

Popularne posty

Discord kontra Forum – dlaczego Twój mózg tęskni za phpBB

Not Your Keys? – Krypto, Prawo i Wielkie Nieporozumienie

Cyfrowy minimalizm - mniej pingów, więcej spokoju