Where security actually lives here
This product has two very different halves, and they fail in different ways. The escrow is a Solana program. Its guarantees are enforced by the chain and hold even against an attacker who controls our infrastructure: bounded payouts, no double settlement, no early round closure, and a vault with no private key. Those are covered in detail in Trust model. The game is an authoritative server, and that is where the real attack surface is. Everything the chain cannot see — who died, who ate what, what a score is worth — is decided there.What the authoritative server does defend against
Because the server owns the simulation and never trusts the client’s version of events, the classic client-side cheats do not work. A modified client can ask for anything it likes; it does not get to assert its own position, speed, or score. Inputs are validated, not applied on faith. The entry path is hardened separately from the game: sign-in is domain-bound, so a signature harvested on a lookalike site does not authenticate against ours, and deposit signatures are consumed permanently and durably — a restart does not reopen a window for reusing one. There is also a minimum stake. It exists for balance reasons rather than security ones, but it closes the door on the cheapest form of griefing.What it does not defend against
Our position is that a bot which actually plays the game — risks its stake, hunts, dodges, and dies — is a legitimate participant. It pays the same fee as everyone else and its mistakes feed the map like anyone else’s. What is not tolerated is abuse of the mechanics rather than skill at them: exploiting the rules to become effectively untouchable, coordinating multiple accounts against a single human, or feeding one account information it should not have. These are handled as market abuse would be — policed as behaviour, not banned as a category. Beyond that, the honest list of what remains open:- Multi-account identity. Nothing today makes one person one player. Wallets are cheap to create.
- The server’s word is final. See Trust model — this is the structural limitation of the whole design, not a bug to be patched.
- Single-signer settlement. One key currently authorises payouts.
Before mainnet
The devnet deployment is a testbed. Moving to real money requires work that has not started, and we would rather publish the list than imply it is already done.1
Adversarial audit of the entire stack
A dedicated red-team pass whose explicit goal is to break this system,
not to review it politely. Scope is deliberately everything, not just the
contract: the escrow program, the authoritative game server as a trusted
oracle, the full money path from deposit through settlement to payout, key
custody, replay protection, and the front end.We are planning to run this as an adversarial evaluation using frontier
models, tasked with finding server-side exploits before anyone with worse
intentions does. The point of scheduling it before mainnet is that on
devnet a finding costs a fix, and on mainnet it costs players’ money.
2
Key custody and multi-signature settlement
Move the authority key out of a single machine into managed custody, and
require multiple signers for settlement, so that compromising one host is no
longer enough to redirect payouts.
3
On-chain verification of game outcomes
Have the server attest to its results with a signature the program itself
verifies, so the escrow stops accepting any well-formed amount from a trusted
caller. This is the change that structurally reduces how much trust the
server holds.
Reporting a vulnerability
If you find a way to take value you are not owed, to make the server report a result it should not, or to reach anything on our infrastructure you should not be able to reach, we want to hear about it before anyone else does.A disclosure address is being set up and will be published here. Until it
is, please do not post working exploit details publicly — reach out through the
contact channel listed on nimboplay.dev and we will
take the conversation somewhere private.

