How the floor works
Market History Run is a first-person maze through twelve moments of market history, from the first publicly sold share in 1602 to stock tokens trading around the clock on Robinhood Chain. The maze and its rules live in one contract, Floor.sol. The website is a way to walk it and to send your route to that contract.
Overview
- The board is 31 × 31 cells, 961 in total. Walls are fixed forever at deployment.
- There is exactly one route from the start cell (1,1) to the exit cell (29,29). It is 256 moves long.
- Twelve stations sit on that route. You clear them by stepping on them, in order.
- A run is the list of cells you crossed, one byte per step. Turning and looking cost nothing.
- The contract replays the run and records it only if every step is legal.
The maze
The grid was generated once with a seeded recursive backtracker (seed 2), which makes a perfect maze: every open cell is reachable and there is one path between any two of them. The layout is stored in the contract as four 256-bit words, one bit per cell, row by row. Cell c is at x = c % 31, y = c / 31.
A copy of the grid is at maze.json with the start, exit, station cells and the shortest route.
Moves
| Byte | Direction | Change |
|---|---|---|
| 0 | Up | y − 1 |
| 1 | Right | x + 1 |
| 2 | Down | y + 1 |
| 3 | Left | x − 1 |
The website writes a byte every time your position crosses into a new cell. Walking into a dead end and back costs two bytes per cell. The contract accepts at most 6,000 bytes.
Stations
| # | Year | Station | Cell | x,y | Step on route |
|---|---|---|---|---|---|
| 01 | 1602 | The first share | 344 | (3,11) | 20 |
| 02 | 1792 | Under the buttonwood | 411 | (8,13) | 39 |
| 03 | 1896 | An average appears | 295 | (16,9) | 59 |
| 04 | 1929 | Black Tuesday | 117 | (24,3) | 79 |
| 05 | 1971 | No floor | 246 | (29,7) | 98 |
| 06 | 1975 | May Day | 302 | (23,9) | 118 |
| 07 | 1987 | Black Monday | 734 | (21,23) | 138 |
| 08 | 2000 | Five thousand | 422 | (19,13) | 158 |
| 09 | 2008 | The boxes | 503 | (7,16) | 177 |
| 10 | 2010 | Flash crash | 751 | (7,24) | 197 |
| 11 | 2021 | GameStop | 849 | (12,27) | 217 |
| 12 | 2026 | The market never closes | 852 | (15,27) | 236 |
The walls between two stations are painted in the era of the station ahead of you: Amsterdam brick, buttonwood bark, newsprint, ticker tape, green-screen terminals, a chalk commission board, red quote boards, dot-com tiles, cardboard boxes, server racks, a phone app and chain blocks.
The contract
function verify(bytes moves) view returns ( bool ok, uint256 steps, uint256 cleared, uint256 at, string reason) function submit(bytes moves) // reverts with the reason if refused function best(address) view returns (uint32) function record() view returns (uint32) function recordHolder() view returns (address) function finishes() view returns (uint32) function lastRuns() view returns (Run[]) // newest first, up to 50 function stations() pure returns (uint16[12]) function isWall(uint256 cell) pure returns (bool)
verify is free to call. It walks the bytes from the start cell and stops at the first problem, returning how far it got. submit runs the same walk and, if it is clean, updates your personal best, the record and its holder, the finish count, and emits Cleared(runner, moves, personalBest, newRecord).
There is no owner, no setter, no upgrade path and nothing to withdraw. A 256-move run costs about 365,000 gas on first submission. The full source is at contracts/Floor.sol and the ABI at contracts/Floor.abi.json.
Status: not deployed yet. Until it is, the website answers Ask the chain with a local copy of the same rules and says so.
Refusals
| Reason | When |
|---|---|
| empty run | Zero bytes |
| over 6000 moves | More than 6,000 bytes |
| unknown move code | A byte other than 0–3 |
| off the grid | A step outside the board |
| into a wall | A step into a wall cell |
| station out of order | A later station before an earlier one |
| stations missing | The run ended with fewer than twelve cleared |
| not at the exit | All twelve cleared, but the last cell is not (29,29) |
Hall
The Hall reads lastRuns(), record() and finishes() straight from Robinhood Chain through the public RPC. Runs you finish on this device are also kept in your browser with their moves, time and verdict, so you can ask the chain about them again or submit them later.
Token
$MHR is an ordinary Pons coin on Robinhood Chain (chain ID 4663). It has no rights over the maze, the contract or the record. The floor judges a wallet with no $MHR exactly like a wallet with all of it.
Sources
- Dutch East India Company, Amsterdam, 1602 · Buttonwood Agreement, 17 May 1792 · Dow Jones Industrial Average, 26 May 1896.
- Black Tuesday, 29 October 1929 · Nasdaq opening, 8 February 1971 · SEC ends fixed commissions, 1 May 1975.
- Black Monday, 19 October 1987 · Nasdaq Composite close 5,048.62, 10 March 2000 · Lehman Brothers bankruptcy, 15 September 2008.
- Flash crash, 6 May 2010 · GameStop closing high $347.51, 27 January 2021.
- Robinhood stock tokens in the EU, 30 June 2025 · Robinhood Chain mainnet, 1 July 2026.