Pay to Roll Dice Game

In my recent dive into the world of the Lightning Network, I built a simple project—a React-based betting game. During the project, I learned a couple of things that I’d like to share in this post.

First of all, I was surprised by how supportive ChatGPT is from a technical point of view. It helped me scaffold the project, recommended specific technologies, and even suggested an appropriate editor. On the other hand, I was unpleasantly surprised by the Lightning Network—how unintuitive it still is from the user’s perspective. But first things first.

I had a rough idea for a one-evening project built on the Lightning Network, so I asked ChatGPT to generate a list of ideas. I chose a dice roll game where:

  • Players bet on a number by making an LN payment.
  • If they win, they take the entire pot by claiming it with LN.
  • If they don’t win, their sats contribute to the growing pot for the next round.

Simple enough—but since I didn’t have any experience with these kinds of technologies, I had to rely on ChatGPT again. It proposed using React and Vite as frontend frameworks, Alby or LNbits for integrating Lightning payments, Supabase or Firebase as a minimal backend solution, and Vercel, Replit, or Netlify for deployment.

Since I wanted to use a mobile wallet instead of a browser extension, the payment solution was narrowed down to LNbits. I also stripped out the need for a backend for the MVP and stuck with React useState only.

Bootstrapping the project was very easy. It basically involved installing a few dependencies via npm and adding an admin key for LNbits. That could be a security issue without proxying the calls through a backend, but I decided to accept the risk for the MVP and the small satoshi amounts in the demo wallet.

After picking a lightweight editor (I went with Zed since I didn’t want to use VSCode or WebStorm), we had to do a couple of iterations over the code to get it running and eliminate all the linting complaints. But it was running and accepting payments—all within an hour! One missing piece was adding support for claiming winnings, but we quickly solved that as well.

Here I’d like to pause: the user experience while using Lightning payments is still quite harsh, and I feel that’s something preventing broader adoption by regular users. I had been using the Phoenix wallet for a while—but only for sending payments. Now I needed the players to receive payments as well, which meant gaining a basic understanding of how Lightning actually works, including generating BOLT11 invoices. That’s quite easy with Phoenix, but still, the user has to request a specific amount—raising questions like, “What if I request too little or too much?”

So I decided to implement LNURL-withdraw, which removes the need for players to create invoices. After a bit of work, I had it running—players could now claim winnings by simply scanning a QR code! Again, not super intuitive, but functional. I can imagine a future where wallets have a single button (e.g., “Scan QR”) for both payments and withdrawals. That would improve the user experience dramatically. But with Phoenix, the user has to first tap “Receive” and then click a tiny icon in the corner—not very user-friendly.

Anyway, let’s move on. I had it running locally, linted, code-reviewed, and ready to deploy. From the options ChatGPT suggested (Replit, Netlify, Vercel), I chose Vercel (based purely on gut feeling, sorry 😄). It connected to the project’s GitHub repo and was able to fetch and deploy the code on demand or on push to a specific branch. So easy! That means the project is public and running—though it does have some security issues without a backend. But that’s a story for another time, if I ever get to it.

Conclusion

I used generative AI for ideating, implementing, and deploying a simple project. I was surprised by how easy it was—originally I wanted a weekend project, but I actually managed to finish it in a single evening. I can now easily imagine no-code or multimodal programming becoming a reality.

Still, user input is necessary—at least for reviewing, refining incorrect URL calls, and challenging odd bits of generated code (linting alone isn’t enough). As for the Lightning Network, I was disappointed by how unintuitive it still is, especially considering it aims for mass adoption. Perhaps it’s not the right protocol for widespread Bitcoin use—yet. Looking ahead, I hope it matures to the point where, like the internet today, people can use it without needing to understand the ISO/OSI model. The future looks bright!

HOWTO export private key from bitcoin-qt

I’ve been struggling with exporting my private key from bitcoin-qt a little bit, so now when I successfully done it, I’m going to describe those steps here. I had old wallet.dat and switched to Electrum wallet, but after MININGCO.ETF closure I received some funds into my old wallet, so there was need to get them out. … Pokračovat ve čtení „HOWTO export private key from bitcoin-qt“

I’ve been struggling with exporting my private key from bitcoin-qt a little bit, so now when I successfully done it, I’m going to describe those steps here. I had old wallet.dat and switched to Electrum wallet, but after MININGCO.ETF closure I received some funds into my old wallet, so there was need to get them out. First I was trying to use PyWallet, but without any success. So I did it with CLI access to bitcoin-qt wallet. Here we go:

  1. Download and unpack bitcoin-qt wallet,
  2. move wallet.dat to ~/.bitcoin directory,
  3. create bitcoin.conf in ~/.bitcoin directory and define rpcuser= and rpcpassword= in it,
  4. run ‚bitcoind -server‘ in terminal,
  5. unlock the wallet for 60 seconds like ‚read -s wp; ./bitcoin-cli walletpassphrase „$wp“ 60; unset wp‘,
  6. and finally dump private key ‚./bitcoin-cli dumpprivkey 1MyBitcoinAddress‘, which is written directly to terminal,
  7. lock the wallet ‚./bitcoin-cli walletlock‘.

Now it’s possible to copy private key and import it into Electrum or another wallet software (or give it to someone :)).

Skagway a Mejdlíčko Smith

Protože se poctivě připravuju na výlet po stopách argonautů, přečetl jsem knihu od Pierre Bertona – Zlatá horečka (Orbis n.p. 1976). A protože jsem současně fanoušek kryptoměn a v této „branži“ se už nejakou dobu pohybuju, neušla mi jistá souvislost mezi částí jedné kapitoly a právě světem kryptoměn. Dovolím si pár těchto odstavců ocitovat, obrázek … Pokračovat ve čtení „Skagway a Mejdlíčko Smith“

Protože se poctivě připravuju na výlet po stopách argonautů, přečetl jsem knihu od Pierre Bertona – Zlatá horečka (Orbis n.p. 1976). A protože jsem současně fanoušek kryptoměn a v této „branži“ se už nejakou dobu pohybuju, neušla mi jistá souvislost mezi částí jedné kapitoly a právě světem kryptoměn. Dovolím si pár těchto odstavců ocitovat, obrázek nechť si udělá každý sám.

Mejdlíčko Smith
Mejdlíčko Smith

Neexistovala žádná správa, ani zákonodárství, a tak toto vákuum bylo brzy vyplněno něčím jiným. Pomalu a nenápadně si obec musila začít všímat muže jménem Jefferson Randolph Smith. To byl náš známý Mejdlíčko Smith, který se v Seattlu vytahoval, že se stane pánem nad Skagwayem. Uprostřed zimy na jeho slova došlo. Začal nad svými spoluobčany vládnout železnou rukou. Než si toho stačil kdo povšimnout, měl svou armádu, vycvičenou, vyzbrojenou a disciplinovanou, vlastní síť špiclů a vlastní tajnou policii. S obchodníky, překupníky a novináři byl jedna ruka a jeho vliv sahal až na kanadskou hranici.

Žádný nově příchozí neušel pozornosti Smithovy organizace. Od okamžiku, kdy se nalodil na loď ve Victorii nebo v Seattlu, až do chvíle, kdy překračoval hranici, byl pod bdělou neutuchající kontrolou Smithových lidí. Byli všudypřítomní. Zamíchali se mezi pasažery lodí už na přístavišti a předstírali, že jsou taky budoucí zlatokopové. Byli na ulicích, v obchodech, v kostelních lavicích, podél celé trasy. Každý měl předem určenou roli. „Důstojný“ Charles Bowers předstíral, že je zbožným pastýřem svého stáda, radil a pomáhal, kde nakoupit zásoby, na koho se obrátit o pomoc. Dobrým tahem bylo poradit každému zelenáči, aby se střežil Smithovy bandy. Billie Saportas, novinář zaprodaný Smithovi, dělal se všemi nováčky hned po příjezdu interview, aby vysondoval stav jejich financí. Štíhloun Jim Foster, pohledný kučeravý chlapec, čekal v přístavu a pomáhal se zavazadly. Van B. Triplett, Starý Tripp, stárnoucí prohnaný darebák, byl hlavní informátor o Klondiku. Ze všech členů Smithova gangu vyzařovala dobromyslnost. Tripp s dlouhými bílými vlasy vypadal jako biblický prorok, ale pod patriarchálním vzezřením byl tvrdý jako žula. Jednou ze silných stránek Smithovy organizace bylo, že nikdo nikdy nevěděl přesně, kdo je a kdo není členem gangu. Většina vypadala naprosto nevinně – buřinky, motýlky, diamantové jehlice, naleštěné vysoké boty. Vypadali jako obchodní magnáti, veřejně činní občané, kněží. Prostý člověk se bál zvednout hlas proti Smithovi na veřejnosti i v soukromí. Nikdo si nebyl nikdy jist, zda ho neposlouchá někdo ze Smithových nohsledů.

Skagway byl brzy zaplaven obskurními podniky všeho druhu, které měly za úkol ožebračovat zlatokopy. Obchodní banka, telegrafní úřad, informační kancelář, vše solidně, důstojně vybavené.

Štíhloun Jim Foster měl tak poctivý exteriér, že všichni nově příchozí hned roztáli. „Proč si nezajdete do cestovního byra?“ poznamenal, když zvedal zavazadlo. „Tam vám pomůžou dostat se dál a neokradou vás jako jinde.“ Když Foster odmanévroval greenhorna do takové kanceláře, došlo k předem dohodnuté akci. V kanceláři ho přijal člen gangu, který hrál majitele, vedl jednání ve věcném obchodním tónu. Když se dohodli, požádal ho o malou zálohu. Bylo totiž třeba pod nějakou záminkou přimět nováčka, aby vytáhl peněženku. Jak se to povedlo, byl s ním konec. Jeden člen bandy, předstírající, že je povaleč, na něho skočil a peněženku mu vytrhl. Vtom vstal jiný gangster, hrající slušného zákazníka, a začal se rozčilovat, že nemůže vidět, jak počestného muže oloupí už i za denního světla. Všichni vyskočili, křičeli jeden přes druhého, dělali zmatek – a muž s peněženkou upláchl.

Všichni předstírali rozhořčení, dokud chudák okradený neodešel, vyděšený, zastrašený, oškubaný.

Na jiné nezkušené zlatokopy čekaly na ulicích volavky. Ti začínali konverzaci o cestě, jak se dostat nahoru, kde sehnat mapy, předpovědi počasí a vůbec podávali co nejvíc informací. Pak je náhle napadlo: „Pojďte, zajdem spolu do informační kanceláře, snad tam něco budou mít.“ A nováček byl postrkován k další ze Smithových institucí.

Informační kancelář měla za úkol vytáhnout z nováčka hlavně podrobnosti o jeho dalších plánech, o přátelích a o stavu jeho financí. Potom buď nešťastníka předhodili některé karbanické herně, nebo když se zdráhal hrát, vytáhli z něho co se dalo a tyto údaje dali k dispozici jiným členům bandy, kteří působili podél trasy.

Tanečnice ve Skagwayi
Tanečnice ve Skagwayi

Smithův telegrafní úřad byl obzvlášť Ďábelský vynález. Ve Skagwayi totiž nebyla v roce 1898 telegrafní linka, ale Smith přesto sliboval posílat telegramy – pět dolarů za slovo. Samozřejmě že všichni chtěli dát zprávu svým milým, než vyrazí dál do hor. A Smith si dal záležet na tom, aby měli do dvou do tří hodin odpověď.

Jindy rozšířili letáky, které varovaly před otrávenou vodou. Nově příchozí měl přijít do obchodní banky, kde mu dají plány otráveného území. Když tam přišel, odvlekli ho do tmavé kůlny, tam ho praštili a při mihotavém světle svíčky ho obrali o všechno.

A ve chvíli, kdy jste byli na dně, kdy jste uvízli v Skagwayi ožebračeni, kdy jste nemohli ani tam ani zpět, objevil se laskavý filantrop s tmavou bradkou a zkoumavýma šedýma očima a nabídl vám ve jménu křesťanské spásy tolik peněz, abyste se dostali domů. A tak se tito ztroskotanci vraceli domů s vděčnou vzpomínkou, že nejen Ďábel panuje na Aljašce, ale že tam žije i jejich dobrotivý zachránce, který samozřejmě nebyl nikdo jiný než Jefferson Randolph Smith.

BTC Trading corp. končí

Když už sleduju všechny tyhlety *coiny říkám si, že bych o nich mohl semtam něco napsat, třeba vždycky, když se naskytne událost větší než malá, což je právě teď: na začátku týdne Ethan Burnside oznámil, že oblíbené kryptocoinové burzy btct.co a litecoinglobal.com končí. Přestože to bylo oznámeno poměrně nenápadně (neposílal hromadný mejl uživatelům, ale toto … Pokračovat ve čtení „BTC Trading corp. končí“

Když už sleduju všechny tyhlety *coiny říkám si, že bych o nich mohl semtam něco napsat, třeba vždycky, když se naskytne událost větší než malá, což je právě teď: na začátku týdne Ethan Burnside oznámil, že oblíbené kryptocoinové burzy btct.co a litecoinglobal.com končí.

Přestože to bylo oznámeno poměrně nenápadně (neposílal hromadný mejl uživatelům, ale toto oznámení vyvěsil jako novinku na stránkách, takže většina uživatelů se o něm dozvěděla, až když přišel mejl některého z vydavatelů aktiva), stejně to spustilo pořádnou výprodejovou spirálu, kdy ceny padaly, jako o život. Tudíž kdo měl koule a s chladnou hlavou si dohledal informace o plánech jednotlivých assetů, mohl pěkně se slevou nakoupit. V opačném případě prodal těžce pod cenou (která se záhy vzpamatovala a ustálila se poblíž ceny původní) a teď nadává na všechny ostatní na všech těch redditech a bitcointalcích. Pravda, oznámení bylo poněkud nešťastné (a o konci třeba někdo neví ani teď) a protože informací je stále poskrovnu a když už jsem byl nucen procházet výživný thread na bitcointalk, ve kterém se X lidí pořád dokola ptá na to samé, zkusím sem napsat nejdůležitější informace a poznatky – nejen ze zmíněného fóra.

"...and it's gone..."
„…and it’s gone…“

Jak Ethan sám napsal, 7. října 2013 bude ukončeno obchodování na obou sajtách (realitou je, že mnoho vydavatelů toho kterého aktiva už obchodování ukončilo, aby udrželi cenu stabilní, než dojde k přechodu jinam). Posledního dne onoho měsíce také dojde k vypnutí obou sajt, takže je doporučené stáhnout si veškerá historická data, pokud o ně má uživatel zájem.

Nějakou dobu (asi tak týden) je v nastavení nová kolonka – veřejná adresa pro výběry, ještě vedle stávající adresy pro výběry. Rozdíl je následující: stávající výběrová adresa slouží pro systém burzy a pro ruční výběr prostředků na účtu, zatímco adresa nová – veřejná – bude sdílena s vydavateli aktiv, pokud by z nějakého důvodu (DDOS, právní problémy) došlo k okamžitému odstranění služby. Prakticky to vidím tak, že Ethan rozeslal jednotlivým správcům seznam, ve kterém je uveden počet shares a tato veřejná adresa (a je dost možné, že bez dalších kontaktů). Proto je důležité jako tuto adresu uvést tu, ke které má uživatel přístupný soukromý klíč, aby mohl v budoucnu podepsat zasílanou zprávu: správce vydá veřejné oznámení – pošlete nám mejl tam a tam a zprávu podepište klíčem svázaným s vaší veřejnou adresou – po obdržení zprávu srovná s adresou uvedenou v „anonymním“ seznamu a bude vědět, kdo je kdo.

Jak dojde k vypořádání? Mnoho správců umožňuje tzv. Direct shares, tudíž přímý nákup mimo jakýkoliv systém (TAT / Asicminer-PT), což bude do budoucnosti plné Colored coins rozhodně ta nejlepší volba. Další převádějí aktiva pod jiné burzovní systémy, jako např. havelock investments, cryptostocks, bitfunder či další. Drtivá většina už poslala plán na blízkou budoucnost mejlem, rozepsala jej na fóru, případně už má převedeno (LTC-Charts).

Budou zrušeny poplatky za transakce, případně zrušena rezerva 0.0025 pro výběr? Nikoliv! O poplatcích se nemluví, ale připadne mi fér, aby zůstaly – přece jenom Ethan si za svoje dítko, které vedou na popraviště, určitě něco zaslouží, nehledě na problémy, kterým zřejmě teď bude muset kvůli němu čelit. K rezervě se vyjádřil – zůstane na místě. Existuje kvůli prachovým transakcím, protože si mnoho lidí nechává na adresu u btct posílat drobné z různých dailyfreebitcoins a protože je peněženka na serveru společná, navyšuje tento prach cenu odchozích transakcí, tudíž výběr veškeré hotovosti vede k záporným částkám na účtu a kdo to má potom lepit ze svého, žeano…

Existuje však ještě jedna skrytá část ledovce, která ukáže, jestli se historie (nebo hysterie?) opakuje a jak moc bitcoin posílil v kramflecích. Když se podíváme o cca rok zpátky, právě došlo k neslavnému konci GLBSE. Pokud se podíváme na graf vývoje ceny je vidět, že tato událost měla s největší pravděpodobností za následek medvědí trend, který trval až víceméně do konce roku.

Vývoj ceny po pádu GLBSE
Vývoj ceny po pádu GLBSE

Nicméně současný vývoj – po konci BTC Trading corp. zatím nic takového nenaznačuje (doubletop dlouhodobého průměru směle ignoruju) – krátkodobý průměr jde stále nahoru, takže následující dny ukážou, jestli tomu tak opravdu bude. Já bych si na býka i vsadil, protože věřím tomu, že tato událost přitopí pod kotlem urychlenému vývoji již zmíněných Colored coins, aby decentralizovaná měna byla opravdu decentralizovaná a neohrožovaly ji úzká hrdla postižitelných služeb. Přece jenom, když už má Bitcoin od minulého týdne i svůj ISO kód – XBT, tak by bylo na čase!

Vývoj ceny v případě btct
Vývoj ceny v případě btct

Vanitygen a import adresy do Bitcoin-QT na MacOS

Dlouho jsem nic nenapsal a protože jsem si právě vygeneroval novou krásnou (1SHM12iG4KPRs54CxjLsCwbvnMJp4bMh5) Bitcoinovou adresu (jo, mohlo to být lepší, ale není na to výkon) na Mackovi za pomocí Vanitygenu, poznamenám si tu postup. Zdrojáky Vanitygenu je možné stáhnout z GitHubu, kde by měl být i Makefile pro Macka. Problém je v tom, že Macek … Pokračovat ve čtení „Vanitygen a import adresy do Bitcoin-QT na MacOS“

Dlouho jsem nic nenapsal a protože jsem si právě vygeneroval novou krásnou (1SHM12iG4KPRs54CxjLsCwbvnMJp4bMh5) Bitcoinovou adresu (jo, mohlo to být lepší, ale není na to výkon) na Mackovi za pomocí Vanitygenu, poznamenám si tu postup.

Zdrojáky Vanitygenu je možné stáhnout z GitHubu, kde by měl být i Makefile pro Macka. Problém je v tom, že Macek má staré verze OpenSSL knihoven (na mém 10.7.5 je OpenSSL 0.9.8x 10 May 2012), takže je nutné použít ty z Homebrew. No a protože není dobrý nápad natvrdo zadávat cestu ke knihovnám a po změně kompilovat znovu, proč si pohodlně netapnout repozitář s Vanitigenem rovnou? Takže i s instalací OpenSSL a Vanitigenu následovně:

[code]bash-3.2$ brew install openssl && brew tap WyseNynja/bitcoin && brew install vanitygen[/code]

Teď už je možné si nechat vygenerovat adresu a privátní klíč:

[code]bash-3.2$vanitygen 1SHM1[/code]

Závěrečným krokem je import privátního klíče do peněženky – používám Bitcoin-QT 0.8.2. Takový nástřel je na bitcoin wiki, kterou doporučuju před akcí projít. Akce samotná sestává z následujících kroků:

  • spuštění Bitcoin-QT v režimu serveru (kdy naslouchá RPC na portu 8332),
  • odemknutí peněženky na dobu nezbytně nutnou k provedení importu,
  • provedení importu soukromého klíče,
  • …,
  • profit.

Aby bylo možné spustit Bitcoin-QT v režimu serveru, je nutné nastavit heslo pro uživatele rpcuser. Provede se to přidáním dvou řádků do konfiguračního souboru ~/Library/Application Support/Bitcoin/bitcoin.conf.

[code]rpcuser=bitcoinrpc

rpcpassword=***************[/code]

Bitcoin-QT je nutné spustit v režimu serveru – provede se tak v konzoli pomocí příkazu

[code]bash-3.2$ open Bitcoin-Qt.app –args -server[/code]

Jakmile naběhne, je možné posílat příkazy na port 8332 – např. pomocí curl. Protože se však takto budou zapisovat hesla a privátní klíče přímo do konzole, je vhodné zapisované příkazy potlačit v historii – před příkaz se do konzole přidá mezera. Sled příkazů je následující:

[code]bash-3.2$ curl –user bitcoinrpc –data-binary ‚{"method": "walletpassphrase", "params": ["heslo_do_penezenky", 120] }‘ http://127.0.0.1:8332/
Enter host password for user ‚bitcoinrpc‘:
{"result":null,"error":null,"id":null}
bash-3.2$ curl –user bitcoinrpc –data-binary ‚{"method": "importprivkey", "params": ["5_privatni_klic_pr_nove_vytvorenou_adresu_pomoci_vanitigenu", "popisek adresy"] }‘ http://127.0.0.1:8332/
Enter host password for user ‚bitcoinrpc‘:
{"result":null,"error":null,"id":null}
[/code]

První příkaz odemkne peněženku na 120s, což by mělo pro provedení druhého příkazu postačovat – stačí jen jeho iniciace, rescan blockchainu může probíhat až po opětovném (automatickém) locknutí.

V tento okamžik (až doběhne import) se nová adresa objeví v adresáři, ne mezi adresami pro příjem. Tomu napomůže ukončení Bitcoin-QT a opětovné spuštění, tentokrát už jako „obyčejné“ aplikace.