Skip to content
View ram0verflow's full-sized avatar
🏗️
Building something crazy today
🏗️
Building something crazy today

Highlights

  • Pro

Organizations

@Elit-Dynamon

Block or report ram0verflow

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
ram0verflow/README.md

ROFL

A small Bitcoin-like chain whose canonical ledger is this README.
Proof of work is subset-sum, not hashing — so mining rewards a better solver, not better hardware

Block explorer · Consensus spec · Mine a block · Send coins · Node


ROFL ledger, height 3985

height 3985
tip 4d3f51672c21d83b25e5403b046e6f9a8ab0efcf3eb93cdd5edfe27f33cc7b17
difficulty 1.0 (bits 0x1e100000)
chainwork 3,862,535,174,013,960,724,158,737,811,002,957,870,368,521,065,880,274 expected hashes
supply 20999.95917118 ROFL in 3986 unspent outputs
next reward 0.00019073 ROFL
next retarget in 14 block(s)
next halving in 4 block(s)
transactions 3988

Recent blocks

# hash miner message txs reward mined
3985 4d3f51672c21d83b25e5… @ywltby 真的假的? 1 0.00019073 2026-09-28 14:06 UTC
3984 1d4c3e4806a831122c89… @ywltby 排位,比世界赛决赛还难打。 1 0.00019073 2026-09-28 13:50 UTC
3983 48e1f454ef5e32d2a490… @ywltby 现在拿了世界冠军还在骂我,那拿了世界冠军有什么用呢? 1 0.00019073 2026-09-28 13:36 UTC
3982 83a892146248fde87043… @longtime666999-dev gm from Bohrium 1 & longtime666999-dev 1 0.00019073 2026-09-28 13:34 UTC
3981 9bf012cacf3906669282… @longtime666999-dev gm from Bohrium 1 & longtime666999-dev 1 0.00019073 2026-09-28 13:14 UTC
3980 cfd4cb1bc3c249f16ab8… @longtime666999-dev gm from Bohrium Fleet #2 & longtime666999-dev 1 0.00019073 2026-09-28 12:57 UTC
3979 3a0f94f2f17d078c3a90… @longtime666999-dev gm from Bohrium 1 & longtime666999-dev 1 0.00019073 2026-09-28 12:40 UTC
3978 259d97521da242127aa9… @longtime666999-dev gm from Bohrium 1 & longtime666999-dev 1 0.00019073 2026-09-28 12:19 UTC
3977 85b36d27c31296d1c4e0… @longtime666999-dev gm from Bohrium 1 & longtime666999-dev 1 0.00019073 2026-09-28 12:02 UTC
3976 e627703e42bf1607b7b2… @longtime666999-dev gm from Bohrium Fleet #2 & longtime666999-dev 1 0.00019073 2026-09-28 11:52 UTC

Miners

miner blocks share
@ywltby 1826 45.8%
@ksanjeev284 488 12.2%
@americanvain 315 7.9%
@hbzhong 311 7.8%
@sd5884703 164 4.1%
@uselessfree 110 2.8%
@k11agent 100 2.5%
@bulanzade 96 2.4%
@b81913221-ai 89 2.2%
@ram0verflow 85 2.1%
@ethahae 69 1.7%
@eltociear 50 1.3%

Balances

Find your own name here once you have run python3 wallet.py identity.

holder address balance
@ksanjeev284 rofl1qn2wv00sq9a875c7pmqf4hfu2ca2y7fa0le96wk 15112.50000000 ROFL
unclaimed rofl1qhkhmy848s09y2jyly8jexk4gd3gnrrclxj2exx 2062.53623944 ROFL
@ywltby rofl1qrrj2pn86jy9ylnatdwuqfazq0ur5pv7xq9lja3 735.00945859 ROFL
@eltociear rofl1qdsfz9v9r2hc798k26egt33zxj8ysg4cgwgcw2z 612.50000000 ROFL
@uselessfree rofl1qm3zqhkwlh85xsaktutuculxhcqnd8vwnj6rt3z 589.84375000 ROFL
@bulanzade rofl1qhu2r7ghewxnxgkruvrx94udl3nduj2a5u3w2my 468.75000000 ROFL
unclaimed rofl1qx5yhylqaa428e8yc3hqseh8z0pe79qe4cpsyxe 272.97973622 ROFL
unclaimed rofl1qyhsqc8t5ldhasar60yfq5u73ga69n94atrg6pt 218.75000000 ROFL
unclaimed rofl1qxu56n53xphqyvpxdqgdny8rvg5hvuw5n58s6ke 174.41506250 ROFL
unclaimed rofl1qhspne7a9fdpv9ne4x8jvklcf38mn3askher4xh 150.09765625 ROFL
unclaimed rofl1q3jwm3gz2s9xy7wa5hg0cgcn9k2s56uma79ynfl 150.00000000 ROFL
unclaimed rofl1qe02gy6ye34lygmska4j93ul03y2hher4rwc2vp 106.25000000 ROFL
@lovivi rofl1qgz45v82mfe8ksyyfezss7m2p8udlsdwp0984vv 93.75000000 ROFL
unclaimed rofl1qnxjnqn35kf6cqutjyfwz4xnldyextf904gxe24 77.34375000 ROFL
unclaimed rofl1q5yjjcsx8nmxxej5djurawqyxepzhqwcxumhret 50.00000000 ROFL
unclaimed rofl1qslgfl5lmx0czpcyq9g6qh29cdrq238mapaxcr5 37.50000000 ROFL
@KirkLee12345 rofl1qkf8jkr6xz5jaa7a33usnvl3x2njcvzlrgjpe62 37.50000000 ROFL
unclaimed rofl1q3yhuearvq4kktun6caezqwdnkaeqmx9gcjlajy 12.50000000 ROFL
unclaimed rofl1qgzsmx8axle22lgkj8gulm3rh9hzcd9jjjzmlq0 12.50000000 ROFL
unclaimed rofl1qrpnrtc6jnaku3lpaghdn6z6gxf4h88jrdpcmxw 6.25000000 ROFL
@k11agent rofl1qewcjd6x7catlvufhqr9ml6ul3j2d3up367fzmx 5.18798797 ROFL
unclaimed rofl1qp86qhl5pats9c28n48zd9pjda8t4jjeqwk7p44 4.68750000 ROFL
unclaimed rofl1qzmkk6cfxs3jd322twyv7luy9eqdpcn2znmusvq 3.12500000 ROFL
@hbzhong rofl1q722t3c2emfk7utwz4y09xwxs0670kknthwuler 2.46276672 ROFL
@iamgd67 rofl1qhqgh92s92snreh5w3afslt2cv3fv7ekuxuz264 2.33275000 ROFL
unclaimed rofl1qyk9qfjwgth2dfazpx9msskj3sswln76x0x9hqa 0.72631818 ROFL
unclaimed rofl1qyj5rcsu0wazjesvrve9utmvty4t8p0n9ulsd2f 0.25844509 ROFL
unclaimed rofl1q2fuw29475jc0mf2tfmufkf90u76pxwtlxn997z 0.06408665 ROFL
@bg6qcn rofl1qvz2auqlgxzgrhhx4x5q6cwrw3723699y6f2a7z 0.04882812 ROFL
unclaimed rofl1q4mmpdyvcsg54838jppvdm4plzpvt4kw9vqlprm 0.03356928 ROFL
@githubskylh rofl1q4vdjjqjdeay87dmjmqu0hewv578k9uwkcf8qjf 0.03070802 ROFL
@daxang rofl1qaehvw6vzus7dmrssc4rul2hgrfxdhwzc8c9h4k 0.02250640 ROFL
unclaimed rofl1ql2wuplshkc5586ea8hejg93eft8cun473xc2v5 0.00305175 ROFL

Recent transfers

block from to amount note
1729 @iamgd67 @ywltby 0.01000000 gm
11 rofl1qhkhmy848s0… rofl1q3jwm3gz2s9… 100.00000000 gm @notram0verflow

Rendered from chain/blocks.jsonl at height 3985. Verify it yourself: python3 verify.py


What this is

Everything here is real except the money. Coins move in UTXOs, spent by ECDSA signatures over secp256k1 — the same curve Bitcoin uses, with RFC 6979 deterministic nonces and low-s enforcement. Difficulty retargets every 16 blocks against how long the last window actually took, clamped to a factor of four. The subsidy starts at 50 ROFL and halves every 210 blocks. Coinbase outputs need 10 confirmations before they can be spent.

The one deliberate departure is the work function. Mining ROFL means solving subset-sum puzzles, not grinding hashes.

Given 40 numbers and a target, find the subset that adds up to it exactly. Verifying an answer is one loop of additions. Finding one is meet-in-the-middle at 2²⁰ time and memory — and memory is what binds, which is why difficulty comes from solving more puzzles rather than bigger ones. A block at the floor needs 1; the ceiling is 3,000, about as many solutions as fit in one GitHub comment. Difficulty stops there, because past that point a harder target buys no extra work.

Nobody has built an ASIC for subset-sum. The reference solver in miner.py is deliberately plain, and beating it is the entire sport. @ksanjeev284's CUDA solver is the fastest one anybody has published so far — it stays out of here because "no dependencies" is the pitch, not because it doesn't work.

The full rules, the measurements behind every constant, and each place this knowingly diverges from Bitcoin, are in SPEC.md.

Mine a block

No dependencies. Python 3.9 or newer, standard library only.

git clone https://github.com/ram0verflow/ram0verflow.git rofl && cd rofl
python3 wallet.py new                                  # make a key pair
python3 miner.py --miner YOUR_GITHUB_HANDLE --message "gm"

It solves puzzles until the block is complete, then prints a line starting with rofl-block-v1:. Paste that as a comment on the block issue. A workflow validates it and, if it holds up, appends it to the chain and updates this page.

About half a minute at the starting difficulty. If the chain gets busy, difficulty rises and you solve more puzzles — that is the point.

Your GitHub handle seeds your puzzles. Two things follow. Nobody can submit your solved block as their own, because a different handle means different puzzles and the work would have to be redone. And copying a solution out of the comment thread gets you nothing, because it answers a question only you were asked.

Send coins

python3 wallet.py balance
python3 wallet.py send --to rofl1... --amount 1.5 --memo "gg"

That prints a rofl-tx-v1: line. The memo rides inside the signature, so it cannot be altered or stripped on the way, and it shows up in the ledger above.

Two ways to submit it, and they do the same thing:

  • Comment on the mempool issue. Ten seconds.
  • Pull request adding one file under chain/pending/, if you want the contribution on your profile. The node reads the file, applies the transaction to main and closes the PR — it is never merged, so your submission can't conflict with anyone else's.

Either way it waits in the mempool until a miner includes it. Higher fees get picked first, and the fee goes to whoever mines the block.

Put your name on your balance

python3 wallet.py identity --handle YOUR_GITHUB_HANDLE

Post the rofl-id-v1: line it prints on the mempool issue from the account it names. The signature proves you hold the key; posting it from your account proves you hold the handle. Your name then appears beside your balance in the table above.

This is display only. It gives nobody any authority over your coins — those are spendable by signature and nothing else — and verify.py ignores the registry completely.

The explorer

A README is one file served identically to everyone — no scripts, no per-visitor anything. So the personal view lives one click away, at the block explorer.

It fetches chain/blocks.jsonl and replays the entire chain in your browser: every hash, every merkle root, every difficulty retarget, every signature, every subset-sum puzzle re-checked against its target. The consensus rules in docs/app.js are a direct port of the Python, and the two agree bit for bit.

Tell it your GitHub handle once and it remembers — your balance, the blocks you mined, your transfers, your rank. That is stored in your browser and sent nowhere. Search takes a block height, a block hash, a txid, a rofl1… address or an @handle.

Nothing on that page is served by a backend. There isn't one.

Verify everything yourself

python3 verify.py

Replays every block from genesis: recomputes each hash, re-derives every difficulty retarget, rebuilds every merkle root, checks every signature and every coinbase amount against the subsidy schedule, and asserts that emitted supply equals unspent supply.

It reads only chain/blocks.jsonl. It does not trust this README, the workflow, or any cached state. If I ever rewrite history, this is what catches me.

python3 tests/test_chain.py

Builds a chain in memory, spends real coins with real signatures, then tries to break it nine ways — tampered subsets, forged signatures, inflated coinbases, double spends, stolen blocks, padded solutions, wrong difficulty, deleted blocks, stale tips — and asserts every one is rejected. Runs at a shrunk puzzle size so the whole suite takes seconds.

Layout

rofl/crypto.py       secp256k1, RFC 6979 ECDSA, bech32
rofl/pow.py          subset-sum: instances, solver, verification
rofl/consensus.py    nBits, retargeting, merkle, UTXO set, validation
rofl/chain.py        load, replay, extend
rofl/render.py       this page
docs/                the block explorer — consensus ported to JavaScript
miner.py             the reference solver — beat it
wallet.py            keys, balances, signed transactions
verify.py            independent full-chain verification
submit.py            what the workflow runs
SPEC.md              the consensus rules

Limitations

One writer, so no reorgs. Two miners who solve the same height race on submission time; the loser is handed the new tip and mines again.

The reference solver is pure Python and wants about 200 MB while it runs. That is the memory wall meet-in-the-middle hits, and the reason difficulty scales by puzzle count instead of puzzle size.

Proof of work makes a rewritten history detectable to anyone holding an earlier copy. It does not make one impossible. This chain lives in a single repository and is exactly as durable as that. SPEC.md §13 and §16 say the same thing in more detail.

ROFL coins are worth nothing and always will be. rofl-wallet.json holds a private key in plain text — never reuse it anywhere that matters.

License

MIT.

Pinned Loading

  1. go-file-explorer go-file-explorer Public

    Go

  2. continuumd continuumd Public

    A local memory daemon for LLMs. Treats the context window like RAM: a kernel pages relevant history in and out on demand, the model asks for more when it's missing something, everything is versione…

    Rust

  3. portfolio portfolio Public

    Shell-first portfolio for ramoverflow.dev — content.json edited on GitHub, live without a redeploy

    JavaScript

  4. ram0verflow ram0verflow Public

    A small Bitcoin-like chain whose canonical ledger is my README. Proof of work is subset-sum, not hashing.

    Python 68 42

  5. rust-payjoin rust-payjoin Public

    Forked from payjoin/rust-payjoin

    Supercharged batching to save you fees and preserve your privacy

    Rust

  6. upi-402 upi-402 Public

    Open HTTP 402 payment standard for UPI — AI agents pay for API endpoints using UPI mandates. PA-agnostic. No intermediary.

    TypeScript