AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
A real Bitcoin solo-mining lottery — a free, non-custodial ticket and a live dashboard. ~1 in 10²³ a block, but not zero.
Translation pending
Developer toolsJavaScript · SwiftGitHub @spiraloceanOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
A real Bitcoin solo-mining lottery — a free, non-custodial ticket and a live dashboard. You almost certainly won't win a block, but it isn't zero.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
You almost certainly won't win. But it isn't zero — and zero is what you get if you never play.
A real Bitcoin solo-mining lottery. Your own node races the entire network for the block reward — every block, it builds the real block template, picks your one ticket, and submits a real block if it ever wins. The odds are astronomical (~1 in 10²³ per block), so realistically you never will. That's the point: a free, non-custodial lottery ticket, a way to actually learn how Bitcoin works, and a tiny, real, non-zero chance in a game that otherwise belongs to data centers.Read the full README ↗You almost certainly won't win. But it isn't zero — and zero is what you get if you never play.
A real Bitcoin solo-mining lottery. Your own node races the entire network for the block reward — every block, it builds the real block template, picks your one ticket, and submits a real block if it ever wins. The odds are astronomical (~1 in 10²³ per block), so realistically you never will. That's the point: a free, non-custodial lottery ticket, a way to actually learn how Bitcoin works, and a tiny, real, non-zero chance in a game that otherwise belongs to data centers.
▶ Live demo: demo.getnotzero.com
| What you do | What you need | |
|---|---|---|
| Watch | Open the dashboard in any browser — real Bitcoin network data, a simulated ticket, the whole visualization. | Nothing. |
| Play (symbolic) | Run the miner in symbolic mode — your deterministic ticket each block, no node. | Python. |
| Mine for real | Run your own Bitcoin node + the miner. It builds the real coinbase, hashes the real header, and submits a real block if you win. | A pruned bitcoind (one-time sync) + your wallet address. |
Most people watch. The committed few mine for real. Both are honest about what they are.
Winning a block solo is roughly 1 in 10²³ per block. To put that in perspective:
You are far more likely to win the Powerball jackpot several times in a row than to win a single block this way.
You will, in all probability, never win. So why do it?
The dashboard is a single HTML5 canvas, no dependencies. It reflects your real node when one is connected, and runs a faithful demo when one isn't.
NEXT BLOCK — live countdown to the next block; counts up honestly when a block runs long.
YOUR CLOSENESS — an odds map plotting your attempts by leading-zero bits against the target. Winning is a thin sliver on the far left; your attempts cluster on the right. It's a brutally honest picture of the gap.
HASH BUILD — watch the real 80-byte block header get assembled field by field, concatenated, and double-SHA256'd into your block hash — then verified, byte-for-byte, against what your node actually submitted.
NETWORK — BTC price, network hashrate vs difficulty, next halving.
The reward ladder — new best (you beat your own record) → a lottery miner wins (detected on-chain via the coinbase tag) → you win (the full celebration). Each tier of "not zero" gets a moment.
When people hear "Bitcoin miner," two fears come up: a machine screaming at 100% with a huge power bill, or malware quietly hijacking your computer to mine for someone else. This is neither — and you don't have to take my word for it, because the code is open.
The one real cost is bitcoind's first blockchain sync (bandwidth + time, one time) — pruning keeps the disk footprint small. After that it's a quiet background hum, not a furnace.
notzero is built for non-technical users (it can set up a private pruned node for you), but if you already run bitcoind and want to point it at your own node, here's the complete RPC surface. It's a read-only client except for one call that only fires on a win:
getblocktemplate, getblockchaininfo, getblockcount, getblockhash, getblock, getrawtransaction, getpeerinfo, getnodeaddresses, getnettotals. None change node state.submitblock — only if a ticket beats the target (~1 in 10²³ per block). Submitting a valid block is what a node is for; it can't corrupt anything.bitcoin.conf, add peers, open ports, or touch your mempool or chainstate. One RPC connection; getblocktemplate once per block (bitcoind caches templates).getblocktemplate is read-only and shared, so it runs cleanly alongside your own mining, wallet, or Lightning tooling — it builds a different candidate block (its own coinbase/payout) and never competes for your work.getblocktemplate + submitblock + the reads above (e.g. via rpcwhitelist). Cookie auth works too — leave user/pass blank.Walk away and the worst case is: it pulls a template every ~10 minutes and hashes it once. Nothing to clean up. Every call is in lottery_miner.py and scripts/node_bridge.py — read them.
web/ the dashboard — vanilla JS + HTML5 canvas, zero dependencies.
reads ./node.json (your local node, same-origin) + mempool.space.
lottery_miner.py the solo miner daemon — getblocktemplate → build coinbase → hash → submitblock.
scripts/node_bridge.py publishes your node's status to web/node.json for the dashboard (no external calls).
app/ native macOS settings + node/daemon manager (Windows & Linux managers planned).
tests/ deterministic snapshot tests for the animated canvas (Playwright).
A few things I cared about while building it:
bits → target, BIP-34 coinbase height, the merkle root, and bech32 / bech32m address validation (BIP-173 / BIP-350, including taproot).submitblock RPC and a direct P2P broadcast to public nodes — with a background worker hammering both (RPC backoff + periodic P2P re-push) and confirming via a public explorer until it lands, resuming even after a crash/restart. No manual step in the ~10-minute window. The published node.json leaks no peer IPs or hostname; credential files are 0600.prefers-reduced-motion, colorblind-safe shape cues, pauses rendering on a hidden tab.Just the dashboard (demo):
cd web && python3 -m http.server 8787 # → open http://localhost:8787
Mine for real: install a pruned bitcoind, point the miner at its RPC, and set your payout address.
cp config.default.json ~/Library/Application\ Support/BitcoinLottery/config.json # then edit it
python3 scripts/node_bridge.py # publishes web/node.json for the dashboard
python3 lottery_miner.py --daemon # the solo miner
The first node sync downloads the full chain (hundreds of GB of bandwidth) while pruning keeps disk small — it takes a while. That's the "earn your node" part of the story.
Tests: npm install && npm test (Playwright snapshot suite).
Released under the MIT License — free to use, modify, and run.