01What it is
DIPSIEGE is a horde-survival game in the style of Vampire Survivors. You only move; your weapons fire on their own. Bears, panic sellers and falling red candles come at you; two bosses arrive at 05:00 and 08:00. Survive ten minutes and you hear the closing bell.
- Playing is free. No entry fee, no in-game purchases, no second token, no NFTs.
- Every run is replayable. A run is a seed plus the list of your inputs. The server replays it with the same code and publishes a replay link.
- Verified runs give shards. Shards decide how each day's stock is split.
- The stock comes from creator fees. The token launches on Pons with a 2% creator tax. Those fees (in ETH) go to the
SiegeVaultcontract, which buys one tokenized stock per day on Robinhood Chain. Players claim their part themselves.
A day without fees is a day without stock. Amounts can be small or zero. Nothing on this site is an "expected" amount.
02How to play
- Open Play and pick a character and a mode. Works on desktop and phones, portrait or landscape.
- Optional: connect and sign in. Signing is a free message, not a transaction. It ties the run to your wallet; without it the run still plays and gets a replay, but its shards count for nobody.
- Get a ticket. The server issues the run's seed and today's market parameters. They are fixed for the whole run.
- Survive. Move to dodge and to pull the horde into your weapons. Pick up green XP gems; each level-up offers three cards.
- Finish. Your input log is sent to the server, which re-simulates the run. You get a result card with the replay link and your shards.
Controls
- W A S D / arrow keys
- Move (diagonals by holding two keys).
- Touch
- Virtual joystick: put your left thumb anywhere on the screen and drag. 16 directions.
- 1 2 3 / click / tap
- Pick one of the three upgrade cards.
- Weapons
- Fire on their own. There is no attack button.
The world does not stop while an upgrade offer is open, so pick quickly. An offer that stays unanswered for 10 seconds picks the first card for you (this keeps co-op moving).
03Characters and upgrades
Four original characters. Each starts with a signature weapon and a perk. Everything else comes from level-up cards: more weapons, passive boosts, or a Coffee Break heal. A weapon at level 8 evolves.
| Character | Signature weapon | Perk |
|---|---|---|
| Bull | Horn Charge: dashes through the horde. | Faster on foot. |
| Dip Buyer | Rebound: green candles that fly out and come back. | Catches falling red candles and throws them back. |
| Diamond Hands | Diamond shields orbit you. | Extra armor and HP. |
| Short Seller | Piercing shots fired behind you. | More damage to weakened enemies. |
Shared weapons and passives
Shared weapons: Bid Wall, Ticker Tape, Limit Order. Passives boost damage, speed, pickup radius, area, HP, regeneration, cooldown, XP, armor and projectile count.
04Modes
| Mode | Seed | Who |
|---|---|---|
| Daily Crash | Same for everyone that UTC day: keccak256(hash of the first Robinhood Chain block after 00:00 UTC ‖ "daily"), published at /api/daily. | Solo. Everyone faces the identical crash, so it is the fairest board. |
| Solo | Fresh per run: keccak256(latest block hash ‖ runId). | One player, a new crash every time. |
| Co-op | Fresh per room. | 2–4 players in a room (5-letter code). Lockstep: every client and the server run the same sim with the same inputs. A downed player can be revived by standing next to them. Each member gets the team result, on their own wallet. |
All modes count for shards the same way. The leaderboard shows each mode separately.
05The ten minutes
Real market data, fixed at ticket time
Each two-minute wave is labelled with a real Robinhood Chain stock token that fell most today (for example "NVDA −3.10%"), and horde density follows real sell volume (density 1.000–1.500). These numbers are read when your ticket is issued and written into the run's parameters, so the run stays deterministic and the replay is identical. The data comes from the server's /api/market (cached up to 5 minutes; marked stale when it falls back to fixed values).
07Holding requirement and sign-in
Shards count for the stock split only when all of these are true:
- The run is verified.
- The wallet was signed in when the ticket was issued (free signature, no transaction).
- The wallet held at least 100,000 of the token at ticket time.
- The wallet still held at least that much at settle time (00:05 UTC the next day).
The server checks balanceOf(wallet) on Robinhood Chain both times. You can play without holding anything; those runs are still verified and replayable, they just do not take part in the split. Check any wallet on /wallet.
08How verification works
The game rules live in one deterministic module (/sim/sim.js): integer math only, a fixed 30 ticks per second, its own seeded random number generator, no clock and no Math.random. Given the same seed, parameters and inputs, it produces the same state on every machine, bit for bit.
- Ticket.
POST /api/run/startanswers with{ runId, simVersion, mode, seed, params, issuedAt, wallet, eligible, sig }. The seed comes from a Robinhood Chain block hash, so nobody (us included) can pick a favourable crash after the fact. - Play. Your browser runs the sim and records your inputs: one entry per tick, only when they change (direction 0–16, upgrade pick). A ten-minute run fits in about 20 KB.
- Finish.
POST /api/run/finishsends the input log and your final state hash. - Re-simulation. The server replays the log through the same sim in a worker thread and compares the state hash (FNV-1a 64 over the full game state) and the result. It also checks wall-clock sanity: the finish must arrive at least 90% of the survived time after the start.
- Publish. The run is stored with its seed, parameters, log, result and hash. A match is ✓ verified; anything else is kept, flagged, and gets 0 shards.
Co-op uses lockstep over a WebSocket: the server stamps each input with the tick it applies to (4-tick delay), broadcasts it, and runs the same sim itself. The server's copy is the authority for the replay and shards.
09Re-check a replay yourself
Every leaderboard row links to /replay/?id=<runId>. That page downloads the run's JSON from /api/run/<runId>, runs the sim in your browser from tick 0 with the published seed, parameters and inputs, draws it with the game renderer, and shows whether your re-simulated hash matches the server's.
You do not have to trust our page either. The sim is plain JavaScript served at /sim/. With Node 22:
To check the seed of a Daily Crash, look up the block in /api/daily on the explorer and hash it with the string "daily". A change to the rules bumps simVersion; old runs keep the version they were played with.
10Vault and stock of the day
- Fees in. The token is launched on Pons V2 with
creatorFeeRecipient = SiegeVaultand a 2% creator tax. Fees reach the vault as ETH. - Harvest. Anyone can call
harvest(). It sweeps pending fees and splits new ETH: 85% to the stock pool, 15% to infra (server, RPC, keeper gas). It never reverts just because nothing is new. - Stock of the day. At 00:05 UTC the keeper closes the previous day. If that day has shards, it buys the allowed stock with the largest 24 h drop ("buy the dip") through Uniswap on Robinhood Chain: ETH → WETH →
SwapRouter02.exactInputSingle, with a mandatory minimum out (≤ 3% slippage from the pool price). - Limits. One day may use at most 50% of the free pool and at most 2 ETH. The owner can change these only within hard caps (50%, 5 ETH).
- Settle. The keeper posts the day's Merkle root, amount and payee count with
settleDay. From then on that stock is reserved: it leaves the vault only throughclaim, and unclaimed stock stays reserved for its owner. - No shards that day? Root 0x0, amount 0, payees 0: nothing is bought and the ETH stays in the pool for later days.
Allowed stocks at deploy: NVDA, TSLA, SPY and AAPL, each through its WETH pool on Robinhood Chain. The allowlist and keeper can only change through a public 48-hour timelock. Every step is on the ledger.
11Payout math
The same derivation runs in the contract (splitDay), on the server and in /shared/payout.js, byte for byte:
Worked example
The vault bought exactly 1 NVDA (1018 units) for a day. Three eligible wallets have 21, 14 and 7 shards (Σ = 42):
| Wallet | Shards | amount × shards / 42 | Final |
|---|---|---|---|
| A | 21 | 500000000000000000 | 500000000000000001 |
| B | 14 | 333333333333333333 | 333333333333333333 |
| C | 7 | 166666666666666666 | 166666666666666666 |
The divisions leave 1 unit; it goes to A (most shards). The three amounts add up to exactly 1018.
Check a proof in your browser
Paste a wallet. This fetches its claimable days from the API and re-computes each leaf and Merkle proof locally with the formula above.
12Claiming
- Open /wallet and connect the wallet that played. Your settled days with stock are listed with their amount and a proof check.
- Press Claim for one day (
claim(day, amount, proof)) or Claim all for every listed day in one transaction (claimMany, all-or-nothing). - Your wallet asks you to confirm on Robinhood Chain (chain id 4663; the site adds it if needed). You pay a little ETH for gas. The stock token is sent to your wallet.
Each day can be claimed once per wallet. There is no deadline: unclaimed stock stays reserved. Nobody else can claim for you, and the site never asks for your seed phrase.
Amounts on this site are raw token units (balanceOf) divided by 1018. Some Robinhood stock tokens apply a display multiplier in wallets and apps, so the number your wallet shows can differ from ours while the tokens are the same.
13Addresses
Everything below is read from /token.json and /contracts.json, the only sources this site uses. Robinhood Chain mainnet, chain id 4663.
Loading…
The only official contract address of the token is the one on this site, pinned on our X and Telegram. Before launch it shows as 0x000…000.
14Risks
- Unaudited contracts.
SiegeVaultis tested on a fork of Robinhood Chain, not audited. Bugs can lose funds. - Rewards can be zero. The vault is funded only by Pons creator fees that actually arrive. No trading, no fees, no stock. We never show an expected amount.
- Keeper and server. Buying and settling are done by a keeper key run by us. If it stops, days are not settled until it runs again. It cannot take reserved stock, and it can only buy allowlisted stocks within the daily limits.
- Owner powers. The owner can, after a public 48-hour timelock, change the keeper, infra address and stock allowlist, and withdraw ETH from the free pool (never stock reserved for claims). Each queued change is visible on-chain before it can execute.
- Tokenized stocks. Robinhood Chain stock tokens may be restricted where you live, may carry their own transfer rules, and are not the same as owning shares at a broker. Their value moves with the market. Check before claiming.
- Swap risk. Stock buys go through on-chain pools with a minimum out; thin liquidity means fewer units bought.
- The token. Holding the token only makes your shards count. It is not a share of anything and nothing here says what it is worth.
- Game rules can change. A rule change bumps
simVersion; runs keep the version they were played with.
15Disclaimers
Not financial advice. Unaudited contracts. Rewards come only from Pons creator fees and can be zero. Tokenized stocks on Robinhood Chain may be restricted where you live — check before claiming.
DIPSIEGE is a free skill game. It is not affiliated with Robinhood Markets, Inc., Pons, NVIDIA, Tesla, Apple, State Street or any other company named on this site; stock names are only the labels of tokenized stocks on Robinhood Chain.
16FAQ
Do I need a wallet to play?
No. Without a wallet the run is still verified and gets a replay link; it just does not count for the stock split.
Why did my run come back unverified?
The server's re-simulation did not reach the same hash, the log was malformed, the ticket expired (15 minutes without finishing) or the run finished faster than real time allows. Unverified runs get 0 shards.
When does a day close?
At 00:00 UTC. The keeper buys and settles at about 00:05 UTC; claims open right after.
Which stock do I get?
The allowed stock that dropped most in the last 24 hours when the keeper closes the day. Every claim for that day is in that one stock.
Can I play several runs a day?
Yes, as many as you like. Your 3 best verified runs that day count.
Is there a deadline to claim?
No. Unclaimed stock stays reserved for you in the vault.