This is totally vibecoded, but the concept is interesting:
Run your wallet on hardware that was built before Bitcoin came out and that doesn't have wifi or bluetooth or a radio of any sort. Also it has a kind of nice plausible deniability to it.
The private key is generated on the console from 128 coin flips you watch land, and it never leaves the cartridge. It signs its own spends: BIP-341 key-path taproot, BIP-340 Schnorr, computed on a 4 MHz 8-bit CPU, and the signed transaction leaves the console the only way anything can -- through the screen, as QR codes or as hex you can read.
It seems like you have to tell the signer about transactions you want to sign by hand:
The coins you own are typed in by hand from a block explorer, because that is the only way facts about the chain can reach a machine with no antenna.
In general the flow is interesting:
| https://github.com/elRaulito/Off-wallet/raw/main/docs/shots/02-professor.png | Talk to the professor. Every line of dialogue, every screen and every character lives in content/story.txt, not in the C. |
| https://github.com/elRaulito/Off-wallet/raw/main/docs/shots/03-starter.png | Pick a starter. Bitcoin is the only one that hatched in this world. The other two refuse to be selected. |
| https://github.com/elRaulito/Off-wallet/raw/main/docs/shots/04-egg.png | Pick an egg. SWIFT is one standalone key, backed up as a WIF string, and hatches in about 70 seconds. ANCIENT is a 12-word BIP-39 seed phrase at m/86'/0'/0'/0/0, restorable in any wallet, and takes about 19 minutes. |
| https://github.com/elRaulito/Off-wallet/raw/main/docs/shots/05-flipping.png | Flip your key. One press, one coin flip, straight onto the grid. 128 flips, 128 bits. The counters show heads, tails and the longest run of the same result. |
| https://github.com/elRaulito/Off-wallet/raw/main/docs/shots/06-flips-done.png | Check the tally, then keep it. 128 fair flips land near 64/64 with no run much past eight. SELECT throws the sequence away and starts again. |
| https://github.com/elRaulito/Off-wallet/raw/main/docs/shots/07-hatching.png | Wait for the hatch. The bar is driven from the VBlank interrupt, so the screen keeps moving while the CPU grinds through the elliptic curve. |
| https://github.com/elRaulito/Off-wallet/raw/main/docs/shots/09-wallet-menu.png | The wallet. Address, QR code, your UTXO list and balance, the secret, the raw output key, and save-to-cartridge. |
| https://github.com/elRaulito/Off-wallet/raw/main/docs/shots/10-address.png | A real bc1p… address. 62 characters of bech32m over four lines. |
| https://github.com/elRaulito/Off-wallet/raw/main/docs/shots/11-receive-qr.png | Receive by QR. Version 3, error-correction level L, 29×29 modules at three pixels each. A phone reads it straight off the screen. |
| https://github.com/elRaulito/Off-wallet/raw/main/docs/shots/12-utxos.png | Your own ledger. Transaction id, output index and amount, typed in from a block explorer, kept in cartridge SRAM with its own checksum. |
Nice. I've got an old Gameboy Color, would love to try this.
Absolutely rad!
It works! Pretty cool, but you cannot enter you own coinflips. The game does the flipping for you.
I know... right, "Welcom to the world of blockchains."!?!? Yes, I made this way more maxi! Still very grateful about the creator, never in my wildest dreams did I think I would change a gameboy game haha