Active Rooms: 0 // Total Escrow Volume: 0.00 SOL // Last Winner: None
CLOSED BETA Access is invite-only while the Anchor program is audited and the server-authoritative match loop is finished. No SOL is staked or paid out — settlement is disabled entirely. Request access below to join the next wave.

KILL TO EARN. DIE TO BURN.

Ten hostiles hold a container yard. You have three minutes to clear it. A full tactical FPS that runs in your browser tab — no download, no install, no launcher. Currently in closed beta: request access and we send an invite code when the next wave opens.

Closed beta · invite only. Staking stays off until the contract is audited.

0.05 SOL
Entry Stake
Zero-Sum
Economy
No Download
Direct Play
HEXOPS gameplay — first-person view down a container yard
  1. 1 Request access — invite code by DM
  2. 2 Redeem the code, play the full game
  3. 3 Stake SOL once the audit clears
01

Connect

Sign a free message to prove the wallet is yours. No transaction, no gas. A player account is created for you — the treasury covers the rent.

02

Pick a mode

Duel 1v1 or Squad 5v5. Training is free and always open if you'd rather warm up against bots first.

03

Confirm the stake

You see the exact numbers before you commit — what you risk, what a win pays, and the rake. Cancel any time while queuing for a full refund.

04

Play, then withdraw

Winnings land in your in-game balance so you can queue again without gas. Withdraw to your wallet whenever you like.

DUEL

1v1

Free-for-all. First to 10 kills takes it.

  • Stake0.05 SOL
  • Win pays0.095 SOL
  • Time cap5 min
— in queue

SQUAD

5v5

Team deathmatch. First team to 40 kills. Payout splits by personal score.

  • Stake0.02 SOL
  • Pot0.19 SOL
  • Time cap8 min
— in queue

TRAINING

FREE

The full game against bots. No stake, no reward, no wallet needed.

  • StakeNone
  • RewardNone
  • AccessInvite

Rake is 5% of the pot. The economy is closed and zero-sum: SOL paid out never exceeds SOL staked minus rake, so trading kills between your own accounts only burns rake. Matchmaking is server-side and random — you cannot pick your opponent.

  1. Phase 0 — ShippedThe game itselfBrowser-native tactical FPS: custom Three.js renderer, procedural audio, 4 weapons, an AI squad that takes cover and flanks, Elo-backed career stats. Runs in a tab, nothing to install. Sound-reveal minimap — enemies stay hidden until a gunshot gives away the firing position.
  2. Phase 1 — Closed betaInvite-only waves (now)Wallet challenge–response auth, waitlist and invite codes, full settings: audio mix, sensitivity, FOV, render quality, accessibility. Gathering play data to tune match length and reward curves before any SOL is on the line.
  3. Phase 2 — MultiplayerServer-authoritative match loopThe gate on everything after it. Movement, hit registration and damage resolved server-side with lag compensation; the client sends input, never outcomes. Positions are withheld from clients that should not see them, so a memory reader has nothing to find.
  4. Phase 3 — AuditContract review & devnetThird-party review of the Anchor program, published in full. Closes the known rage-quit refund hole, splits the settlement authority from the treasury, and moves fees behind a multisig. Devnet play with test SOL — real economics, no real money.
  5. Phase 4 — StakingReal SOL, mainnetDUEL 1v1 at 0.05 SOL and SQUAD 5v5 at 0.02 SOL. Escrow, random server-side matchmaking, one settlement transaction per match. Ships only after Phase 3 passes.
  6. Phase 5 — DepthRooms, tournaments, clansCustom rooms with a stake you set, bracketed tournaments with a pooled prize, clans with shared standings, and a cosmetic-only marketplace. Cosmetic means cosmetic — no purchasable stat advantage, ever.

No dates. Phase 4 unlocks when the audit passes, not on a calendar — a shipping date is a bad reason to put a player's SOL behind unreviewed code.

Zero Installation

HEXOPS is one file: a custom Three.js renderer and hand-written shaders running directly in a browser tab. No launcher, no install, no account. A fully rendered 3D match loads in seconds — on the machine you already have.

Non-Custodial Escrow

Stakes are designed to sit in a program-derived vault on Solana, not in a company ledger, and settlement is a single on-chain transaction per match. The program is written but unaudited and undeployed — no funds are held anywhere today.

No Pay-To-Win

Nothing is purchasable that changes how you shoot — no gear tiers, no NFT boosts, no paid advantage. Winning takes the pot minus rake; inside a team it splits by personal score. Elo decides who you are matched against, never what you are paid.

Procedurally Synthesized

There are no audio files and no texture downloads. Every gunshot, footstep and impact is synthesized live through the Web Audio API, and the yard is generated at runtime — which is why the whole game ships as a single page instead of a multi-megabyte asset bundle.

1. Economic Loop & Reward Pool

HEXOPS is a closed, zero-sum economy. There is no token, no emission schedule and no faucet: the only SOL that can ever leave a match is SOL that players staked into it. Every payout is funded by an opposing player's loss, minus the protocol rake. This is a deliberate constraint — an economy that mints rewards from nothing is one that pays farmers faster than it pays players, and it always collapses.

Why no per-kill payouts. Paying SOL for each kill would print currency from thin air and make kill-trading between two of your own wallets profitable. In HEXOPS, kills only move the share of a pot that already exists. Two colluding accounts cannot gain — they can only burn rake.

SETTLEMENT MATH

TermDefinitionExample — 1v1 @ 0.05 SOL
PotSum of every player's entry stake0.100 SOL
RakeProtocol fee, 5% of pot (platform_fee_bps, hard-capped at 10%)0.005 SOL
DistributablePot − rake0.095 SOL
Winner takeFull distributable in 1v1+0.045 SOL net
LoserForfeits stake−0.050 SOL

TEAM SPLIT (5v5)

The winning team divides the distributable pot in proportion to personal score, so carrying your team pays more than being carried:

score = kills × 1 + assists × 0.5 − deaths × 0.5, floored at 0.

INVARIANT

For any match: Σ payouts + rake = Σ stakes. The program never transfers more than the escrow holds, and the vault is never permitted to drop below its rent-exempt minimum.

Status. The economics above describe the design the Anchor program implements for 1v1. Team settlement, matchmaking and on-chain SOL movement are not live — see sections 2 and 4. Nothing on this site currently pays or charges real SOL.

2. Anchor Smart Contract Architecture

The program is written in Rust with the Anchor framework. All state lives in Program Derived Addresses, so account ownership is verified by the runtime rather than by application logic. Arithmetic is checked throughout; there is no unchecked add or subtract on any balance.

ACCOUNTS

  • GameConfig — singleton at seed ["config"]. Holds the authority, rake in basis points, entry-fee bounds, match timeout, lifetime volume and accrued fees.
  • PlayerProfile — one per wallet at ["player", wallet]. Career kills, headshots, wins, lifetime earned/lost, Elo, and the in-game SOL balance.
  • GameMatch — one per match at ["match", match_id]. Escrow record, participants, status, result stats and the payout breakdown.
  • Vault — a single program-owned PDA that custodies all deposited SOL.

INSTRUCTIONS UNAUDITED

  • initialize / update_config — set rake, stake bounds and timeout. Rake is rejected above 1000 bps by the program itself, not by convention.
  • register_player — creates the profile PDA. Once per wallet, ever.
  • init_player_sponsored — creates the same PDA with the treasury paying the rent and the player not signing, so a first-time user needs no SOL of their own to exist on chain.
  • deposit / withdraw — moves SOL between your wallet and the vault. Withdraw is user-signed; no authority can move a player's balance out.
  • create_open_match / join_match — the 1v1 path. One player opens a match at a stake, the second joins; both stakes are debited into escrow.
  • create_match — the team path. The full roster (2–10 wallets split across two teams) is known up front and every stake is escrowed in one instruction.
  • cancel_match — creator reclaims a stake before anyone joins.
  • timeout_matchpermissionless. Anyone may crank a match the server failed to settle, returning stakes. This exists so a backend outage can never strand funds.
  • settle_match_1v1 / settle_match — authority-only. Splits escrow, records stats, updates Elo, for the duel and team paths respectively.
  • refund_team_match — unwinds a team match that cannot be settled, returning every participant's stake rather than leaving escrow stranded.
  • withdraw_fees — moves accrued rake to the treasury.

ELO ON CHAIN

Rating is computed in pure integer arithmetic against a precomputed expectancy table. Floating-point powf compiles to soft-float on BPF: expensive in compute units and not guaranteed bit-identical across toolchains. Deterministic settlement requires integers.

Not deployed, not audited. The program compiles and the 1v1 path is implemented, but it has not shipped to mainnet and has not been through third-party review. A published internal audit is a prerequisite for enabling staking — including a known issue where a timed-out match currently refunds both sides, which a losing player could exploit by disconnecting. That is fixed before any real SOL moves.

3. Anti-Cheat & Match Integrity

A browser client is fully under the player's control. Any design that trusts what the client reports is not an anti-cheat design — it is an honour system with extra steps. HEXOPS is therefore built around a single rule: the client sends input, never outcomes.

WHAT RUNS TODAY SHIPPED

  • Ed25519 wallet challenge–response at connect. Proves key ownership; proves nothing about play.
  • Plausibility bounds on any submitted result — kill ceiling, minimum match duration, maximum kills per second, per-connection submission rate limits.
  • Every rejection is written to a review queue rather than auto-banning. False positives cost a player their account; a queue costs a moderator a minute.

These are sanity checks, not anti-cheat. The numbers still originate on the client, and the code says so in as many words. Presenting them as more than that would be dishonest.

WHAT STAKING REQUIRES BUILDING

  • Server-authoritative simulation. Movement, hit registration and damage resolved on the server. The client transmits key state and view angles only.
  • Lag compensation with server-side rewind, so authority does not cost responsiveness.
  • Server-side reveal. Positions of players you cannot legitimately perceive are never sent to your client, so a memory reader has nothing to read. The minimap already reflects this: enemies are invisible until a gunshot reveals the firing position.
  • Statistical review of accuracy, reaction-time and flick distributions across sessions.
The honest position. Staking is off precisely because this is unfinished. Shipping money on top of a client-trusting loop would be the single fastest way to lose it.

4. Matchmaking, Modes & Rating

Two modes, deliberately separated because they need different economics. Free-for-all is easy to collude in; team play is not.

ModeFormatStakeWin condition
DUEL1v1 free-for-all0.05 SOLFirst to 10 kills, 5 min cap
SQUAD5v5 team deathmatch0.02 SOLFirst team to 40 kills, 8 min cap
TRAININGSolo vs AINoneClear 10 hostiles, 5 min cap

QUEUE DESIGN PLANNED

  • Matchmaking is server-side and random. You cannot select an opponent, which is what makes self-matching between your own wallets impossible rather than merely unprofitable.
  • Pairing opens at ±150 Elo and widens over time so a thin queue still fills.
  • Stakes are escrowed on queue and refunded in full on cancel, timeout, or a failed fill.
  • A 5-second frozen countdown opens every match so no one loads in mid-firefight.

RATING

Players start at Elo 1000. Rating transferred to the winner is K × (1 − expected) with K = 32, always at least 1 point, and the loser never falls below a floor of 100. The transfer is symmetric: the winner gains exactly what the loser loses, so the pool neither inflates nor drains.

ANTI-FARMING SUMMARY

VectorCountermeasure
Kill-trading between own walletsZero-sum pot; collusion only burns rake
Picking a weak opponentRandom server-side matchmaking
Alt accounts / smurfingStake required up front; Elo-banded queue
Idling for a payoutIdle kick, stake forfeit
Rage-quitting a losing matchDisconnect scored as a loss FIX PENDING
Fabricated resultsServer-authoritative scoring; client never reports kills
Rank Operator Wallet ELO Rating Total Wins

How do I get in?

Request access with your Solana wallet address and we send an invite code when the next wave opens. Codes unlock the game on your browser immediately — no payment, nothing to install, and no transaction to sign.

Why is it invite-only?

The escrow contract is unaudited and the server-authoritative match loop is unfinished. Controlled waves let us fix what play data exposes before anyone's SOL is involved.

Do I need crypto to play?

No. The beta is the complete game — same map, same weapons, same AI — and costs nothing. A wallet only matters later, for staked matches.

Is any SOL at stake right now?

None. Staking is disabled and no on-chain settlement is live. Nothing on this site can currently charge or pay you.

Can I lose my stake later?

Yes, once staking ships. A staked match puts real SOL at risk: losing forfeits your entry. Never stake more than you can afford to lose.

How do you stop farming?

The economy is zero-sum — payouts never exceed stakes minus rake, so trading kills between your own wallets only burns rake. Matchmaking is server-side and random, so you cannot choose your opponent.

— SOL
0/0 players
0:00 elapsed

Searching for opponents…

MATCH FOUND
5
OperatorKADScoreSOL
HOLD TAB
HOLD BREATH
TacticalSECTOR 7
3:00
0 / 10 ELIMINATED
0.050
SOL BALANCE
Vitals100
Armor50
1M4 CARBINE
2KS-12 PUMP
3P-9 SIDEARM
4SR-7 LONGBOW
M4 CARBINE
FULL AUTO
30/ 210
PAUSED
CLICK ANYWHERE TO RESUME
-- FPS
CLOSED BETA

REQUEST ACCESS

HEXOPS is in closed testing while the escrow contract is audited and the server-authoritative match loop is hardened. Join the list and we send an invite code when the next wave opens.

ON THE LIST
This is your spot on the list and your seat in staked matches.
How we reach you with the code. No @ needed.
Already have a code?
INVITE CODE

ENTER CODE

Paste the code from your invite. It unlocks the game on this browser.

No code yet?
YOU'RE ON THE LIST

REQUEST RECEIVED

We'll send your invite code when the next wave opens.

YOUR POSITION
Follow @hexops_ for wave announcements.

SETTINGS

SAVED AUTOMATICALLY
HEXOPS // SECTOR 7
CONTAINER YARD 04
GRID 118-042
10 HOSTILES · 03:00 ON THE CLOCK
HEXOPS
CLASSIFIED // TASK FORCE HEXOPS
HEXOPSSECTOR 7 — HOSTILE
W A S D MOVE
MOUSE LOOK
LMB FIRE
RMB AIM DOWN SIGHTS
SHIFT SPRINT · HOLD BREATH
SPACE JUMP · DOUBLE · MANTLE
CTRL CROUCH
R RELOAD
1–4 / WHEEL WEAPONS
V FIRE MODE
ESC PAUSE
PRESS TO START
ELIMINATE ALL 10 HOSTILES BEFORE THE CLOCK RUNS OUT
MISSION REPORT
MISSION FAILED
SECTOR 7 — WAREHOUSE DISTRICT
0/10
ELIMINATIONS
0
HEADSHOTS
0%
ACCURACY
0:00
TIME SURVIVED
+0.000 SOL
HEXOPSLOADING ORDNANCE…