Hash Runner — Run the Chain
A WebGL endless runner down the blockchain. Jump the stale blocks, dodge the orphans, collect nonces and seal blocks. Free, no sign-up, runs in your browser.
Arrows or A/D to change lane, Space or W to jump. On a phone: swipe across, tap to jump.
How to play
- Arrows or A/D change lane; Space, W or the up arrow jumps. On a phone, swipe across to change lane and tap to jump.
- An amber bar lying across all three lanes is a stale block. Jump it — moving sideways will not help.
- A red wall standing in two lanes is an orphan. Move into the free lane — it is taller than you can jump.
- Green cubes are nonces. Six of them seal a block, and every block you seal speeds the track up until it tops out.
How it works
An endless runner with two obstacles that want opposite things from you. A stale block lies low across all three lanes — you jump it, and changing lane does nothing. An orphan stands full height across two of the three — you move into the free one, and jumping does nothing, because the wall is taller than the jump. So there is no single input that keeps you alive: holding jump dies on the first orphan, and holding still dies just as fast, to a bar or to a wall in the middle lane you never left. Both are measured in the tests rather than asserted. Nonces sit on the line surviving already takes: in the free lane of an orphan, and in the air over a stale. Six nonces seal a block, every block speeds the track up until it tops out, and the gap between obstacles shrinks from just over a second to four tenths, where it stops — almost every run ends around there. Rendered in WebGL with hand-written shaders and no 3D library, so the whole page stays inside the performance budget; if WebGL is unavailable it falls back to a 2D renderer and stays playable. Runs on your device, nothing is sent anywhere.
A game about a chain, not a mining guide. A real stale block is what consensus leaves behind; a real orphan is a block that arrived before its parent. Neither is something you steer around.
Frequently asked questions
What is the difference between a stale block and an orphan?
In the game, a stale lies low across the track and an orphan stands tall in two lanes, so one wants a jump and the other wants a lane change. The names come from real mining. A stale block is a valid block that lost the race — mined, but another block at the same height got built on instead. "Orphan" is used loosely for the same thing; strictly it means a block whose parent a node has not seen yet, which modern clients no longer keep around. The game borrows the two names for two hazards that punish opposite habits — it is not a lesson in chain reorganisation.
Can I just hold one button?
No, and that is the design. Jumping every time dies on the first orphan wall, which is taller than any jump can reach. Never jumping dies just as fast — about half the time to a stale bar, and about half the time to an orphan standing in the lane you never left. Both habits are measured across forty seeds in the tests, and neither survives past a couple of hundred metres. That a jump cannot clear a wall is asserted too: if it could, one habit would beat the whole game.
Does it ever get impossible?
It gets very hard, and then it stops getting harder. Both knobs — the speed and the gap between obstacles — stop moving at twelve sealed blocks, so past about a hundred seconds the game holds at a fixed difficulty: 0.40 seconds between obstacles, of which a two-lane dodge costs 0.27, leaving about 0.15 to react in. Almost every run ends there. A player who reads every obstacle correctly is not forced to lose, though — the game is deliberately never unfair, and a test walks every difficulty level to assert the gap never drops below what a two-lane change physically needs.
Does it need a fast machine?
No. It draws every box in the world — track, walls, nonces and you — as instances of one cube in a single draw call, with hand-written shaders and no 3D library. A WebGL framework would have cost about 150 KB gzipped on the page people land on from a share; this costs a couple. Without WebGL it falls back to a 2D renderer and is still playable.