1. The Platform
CX Chain is a purpose-built Avalanche L1 subnet for provably fair on-chain gaming. It launched in May 2025 and has processed over 725,000 transactions across 276,299 game rounds spanning roulette, dice, wheel, coinflip, range games, and — its most technically ambitious offering — zero-knowledge poker.
The chain operates with on-demand block production — blocks are only created when transactions occur. Four infrastructure bots handle 98%+ of all transaction submission: the House Relay, Secondary Bot, VRF Oracle, and ERC-4337 Bundler. Players interact through gasless smart wallets, never paying transaction fees directly.
Two chains, one system
| Layer | Chain | What It Does |
|---|---|---|
| Settlement + Economics | CX Chain (737373) | Game outcomes, round resolution, poker hands. All games: full bet economics visible for active rounds (100% event coverage). |
| VRF + Accounts | C-Chain (43114) | VRF randomness generation, player account balances |
| Consensus | P-Chain | Validator registration, delegation |
This separation is by design. CX Chain is optimized for fast round resolution. The economic complexity — account balances, bet signatures, payout calculations — stays on C-Chain where contract state is richer. The P-Chain handles validator registration for CX Chain's own L1 validator set (more on this in The Players).
A constant cross-chain heartbeat
What makes CX Chain unusual in the Avalanche ecosystem is volume. The roulette games run continuously — bots trigger rounds every few seconds, each round producing a cross-chain VRF request to C-Chain and a response back. This creates a constant ICM heartbeat:
Each round generates at minimum 3 ICM messages: the VRF request (CX→C), the VRF fulfillment (C→CX), and a settlement acknowledgment. At ~50,000 rounds per month, CX Chain is one of the highest-volume Avalanche Interchain Messaging consumers — not because of user demand, but because the bots spin continuously. 91.6% of primary roulette rounds are idle (no player bets), and 99.9% of secondary roulette rounds are idle. The VRF cost of serving empty rounds is ~$4,233 in LINK fees with no economic return.
This constant load has a side effect: CX Chain is an ongoing stress test for Avalanche's cross-chain infrastructure. Every VRF cycle exercises Teleporter message delivery, Warp precompile verification, and Chainlink oracle integration in production.
Transaction volume (monthly)
2. Platform Evolution
CX Chain underwent a complete infrastructure overhaul in February 2026. Every game contract was retired and replaced, the meta-transaction system was swapped, and a new multi-token economy was introduced.
The migration timeline
| Date | Event |
|---|---|
| May 2025 | Chain genesis. FAIR token deployed. Initial game contracts (v1). |
| Sep 2025 | Phase 1 betting begins via ICTT cross-chain transfers. |
| Oct 2025 | Phase 2: direct FAIR betting. Activity ramps to 63K txs/month. |
| Dec 2025 | Poker tables deployed (Wave 1). ZK Groth16 verifiers live. 100K txs/month. |
| Feb 6-11, 2026 | V2 migration. All v1 contracts retired. 10 UUPS-upgradeable game proxies deployed. ERC-4337 Account Abstraction replaces GSN meta-transactions. |
| Feb 2026 | stAVAX introduced as real-money betting token. |
| Mar 2-3, 2026 | Poker Wave 3: 6 tables on latest implementation. Then deployment pauses. |
Three platform phases
| Phase | Period | Token | Volume | Players |
|---|---|---|---|---|
| Test | Sep 30, 2025 – Feb 11, 2026 | FAIR | 414,871 FAIR wagered | 200+ |
| Transition | Feb 6–15, 2026 | — | v2 contracts + stAVAX | — |
| Production | Feb 15, 2026 – present | stAVAX | $38,274 real money | ~25 |
Infrastructure shift
The shift from GSN meta-transactions to ERC-4337 Account Abstraction is the clearest infrastructure trend. Players now use smart wallets with scoped session keys — temporary authorization limited to specific game contracts, zero-value calls only, with expiration timestamps.
3. The Games
Casino games
Roulette dominates at 91.8% of all-time rounds. Five other game types exist but see minimal use. Note: 91.6% of primary roulette rounds and 99.9% of secondary rounds are idle (bot spinning with no bets).
| Game | Type | Outcomes | All-Time Rounds | Active Rounds | Share |
|---|---|---|---|---|---|
| Roulette (Primary) | Multiplayer | 0-36 | 54,524 | 4,567 | 62.1% (v2) |
| Roulette (Secondary) | Multiplayer | 0-36 | 33,155 | 33 | 37.8% (v2) |
| Dice | Single-player | 1-6 | 3,623 | 359 (v2) | 1.3% |
| Wheel | Single-player | 0-24 | 20,165 | 308 (v2) | 7.3% |
| CoinFlip | Single-player | 0-1 | 203 | 203 (v2) | 0.07% |
| Range | Single-player | 0-98 | 10,609 | 177 (v2) | 3.8% |
ZK Poker
The most technically ambitious feature. Thirteen table contracts implement mental poker — a cryptographic protocol where no trusted dealer is needed.
Each shuffle generates a Groth16 zero-knowledge proof, verified on-chain before cards are dealt. Cards are encoded as points on the BabyJubJub elliptic curve, encrypted with ElGamal using aggregated player public keys. The deck is provably fair as long as at least one player used a truly random permutation.
Deployment stopped March 3. Two tables remain active. The architecture is sophisticated but 353 hands in six weeks hasn't found product-market fit.
4. The Money
CX Chain runs a dual-economy: free-play chips for casual gaming and real money for actual gambling.
Four betting tokens
| Token | Type | Supply | USD Value | Transfers |
|---|---|---|---|---|
| FAIR | Free-play chips | 111,000,100 | $0 (mintable, no market) | 43,969 |
| stAVAX | Real money | 2,330 | ~$22,100 | 18,419 |
| Native AVAX | Gas token | 389 | ~$3,700 | — |
FAIR is casino play money. It exists only on CX Chain — zero bytecode on C-Chain. The House Relay owns the mint function and holds 99M of the 111M supply. No bridge, no DEX, no price discovery.
stAVAX is the real bet. Hypha's liquid staked AVAX, bridged from C-Chain via ICTT. Identity definitively confirmed via RPC: name()="Staked AVAX", symbol()="stAVAX", bridge locks Hypha stAVAX on C-Chain and mints on CX Chain. This token was misidentified four times during investigation before RPC calls settled it. The house holds stAVAX, which earns staking yield passively while serving as gaming collateral — the house profits on the edge and the yield.
Where the money sits
| Holder | FAIR | stAVAX | Role |
|---|---|---|---|
| House Relay | 99.08M | ~0 | Master bankroll |
| Treasury | — | 2,157.71 | stAVAX payouts |
| GamePool v2 | 10.00M | 3.17 | FAIR accounting |
| GamePool v1 | 1.10M | — | Legacy (dead) |
Game contracts hold zero balances. All value sits in pools and treasury. Total real value on the platform: ~$24,200 in bankroll.
Production economics (since Feb 15, 2026)
| Channel | Volume | Bets/Hands | Players | Edge |
|---|---|---|---|---|
| stAVAX gaming (CX Chain) | $14,122 | 6,266 bets | 5 | 1.83% (roulette), 5.36% (blended)* |
| stAVAX poker (CX Chain) | $24,152 | 297 hands | ~25 | 5% rake (contested pots) |
| Total | $38,274 |
*The previously reported 32.69% was a computation artifact from undercounted payouts. Per-game Treasury decomposition: stAVAX roulette = 1.83% (matching the 1.90% event-path figure), overall stAVAX = 5.36% (consistent with the universal 5% platform fee).
Bet amount visibility
All games emit bet amounts on-chain. Non-roulette games use Treasury's TreasuryBetPlaced event (23,809 emissions with player, token, and amount). Roulette uses RouletteBetPlaced events for all active rounds (4,531 of 4,531 covered — 100%). The previously reported "opacity" of roulette bet data was a misclassification of idle rounds (91.6% of rounds have no bets to report).
5. The Technology
Cross-chain VRF
Every game round triggers a cross-chain randomness request. The flow spans two chains and four transactions:
Bot triggers round. BetPlaced emitted (empty data). VRF request sent via Teleporter.
Teleporter delivers to VRF Consumer. LINK paid to Chainlink VRF v2.5 Coordinator.
Single Chainlink node generates random word. BatchVRF sends result back via Teleporter.
Outcome recorded. Zero transfers. Pool reconciliation for all 4 tokens.
This cycle runs ~7,000 times per day, continuously, regardless of whether players are actively betting. Analysis of RoundBetsClosed events revealed that 91.6% of these rounds are idle — the bot calls startNextRound() when no player has bet, generating a full VRF round-trip for nothing. Total VRF cost: ~$4,233 in LINK fees for 393K fulfillments, with the vast majority serving empty rounds. Each round generates 3+ cross-chain messages, sustaining ~300K ICM messages per month through a single Chainlink node.
Mental poker cryptography
| Component | Implementation |
|---|---|
| Card encoding | 52 points on BabyJubJub elliptic curve (SNARK-friendly) |
| Encryption | ElGamal with aggregated player public keys |
| Shuffle proof | Groth16 ZK-SNARK (4 verifier contracts per game phase) |
| Card reveal | Per-street decryption key exchange |
| Timeout | 60 seconds per action, deposit slashing |
| Server mode | shuffleAsServer() with identical ZK verification |
Account abstraction
Players never hold gas tokens. The platform uses ERC-4337 smart wallets with scoped session keys:
| Constraint | Value |
|---|---|
| Max target contracts | 4 |
| Max function selectors | 12 |
| Value transfers | Zero only (no fund extraction) |
| Scope | Bound to specific game/table IDs |
| Expiration | Timestamp-limited |
6. The Players
CX Chain has an infrastructure problem: the bots outnumber the humans.
| Address Type | Monthly Txs | Share |
|---|---|---|
| House Relay (bot) | ~80,000 | 55% |
| VRF Oracle (bot) | ~50,000 | 34% |
| Secondary Bot | ~15,000 | 10% |
| All players combined | ~2,000 | 1.4% |
Of 202 unique gaming addresses all-time (~25 in production):
| Cohort | Count | Bets | Behavior |
|---|---|---|---|
| New | 72 | 30 | Tried once, minimal activity |
| Regular | 44 | 7,320 | Steady moderate play |
| One-shot | 18 | 46 | Played once, never returned |
| Grinder | 8 | 22,469 | 73% of all bets from 8 players |
No whales. No bots among players. The top grinder placed 13,148 bets at 0.06 FAIR average — micro-stakes free play. Most players are near-breakeven, consistent with provably fair mechanics.
Player churn is severe: 89.5% of pre-2026 addresses never returned.
Network operators: a permissioned L1
CX Chain uses Avalanche's PoS ValidatorManager framework, but in practice it operates as a team-run permissioned chain. Only 3-4 addresses control all validation and delegation:
| Role | Address | Activity |
|---|---|---|
| Primary Bot (uptime proofs) | 0xeedf0b34 | 2,326 txs |
| Validator Registrar | 0x744d5f7e | 625 txs (206 of 243 registrations) |
| Delegator Operator | 0xc786979f | 634 txs (91% of all delegations) |
113 validation periods were created and all 113 have ended — zero are currently active on-chain (the chain runs via P-Chain-level validators not captured by these contract events). No slashing mechanism exists. A reward contract pays operators in native FAIR (304 payments to 3 addresses), but primary infrastructure bots receive zero on-chain compensation.
Node licenses
| License | Supply | Holders | Top Holder |
|---|---|---|---|
| CXNL (Node License) | 591 | 50 | 0x28937f51 (282 NFTs) |
| CXHOL (Operator License) | 304 | 3 | 0xc786979f (251 NFTs) |
CXNL holders do not overlap with validator operators — the licenses appear to be governance tokens, not operational requirements. The top CXNL holder (0x28937f51) is the poker rake recipient. The top CXHOL holder (0xc786979f) is the delegator operator above. The same small team controls infrastructure, rake collection, and license distribution.
7. Fairness & Trust
Verified house edge
All games charge a universal 5.00% platform fee on every bet (HOUSE_EDGE_BPS = 300 confirmed from contract storage). Roulette fairness triple-validated by three independent methods. Outcome uniformity confirmed via chi-square on all 15 game contracts (275,776 total outcomes, all PASS).
Roulette: three methods, one answer
| Method | Edge | Sample | Source |
|---|---|---|---|
| Event-path (bet events + outcomes) | 1.90% | 19,367 bets | RouletteBetPlaced + RoundResolved matching |
| Treasury-path (TreasuryBetPlaced + PayoutSent) | 1.83% | 5,320 bets | Pool accounting events |
| Relay-path storage (upgrade-window recovery) | 1.39% | 1,955 bets | Contract storage reads via archive RPC |
| Theoretical (European roulette) | 2.70% | — | Mathematical expectation |
All three observed edges fall within the expected confidence interval of 2.70% theoretical European roulette. The convergence across independent data sources — each covering different subsets of rounds, using different extraction methods — provides strong evidence of fair play.
All games
| Game | Observed Edge | Sample | Assessment | Evidence |
|---|---|---|---|---|
| Roulette (CX, stAVAX) | 1.90% | 19,367 bets | Fair | Event-path, 100% active-round coverage |
| CoinFlip | 3.43% | 167 bets | Fair | Treasury BetPlaced + RewardPaid |
| Dice | 5.93% | 10,055 bets | Fair | Statistical noise (3% theoretical, hardcoded payout) |
| Wheel | 6.91% | 2,804 bets | Fair | 4% theoretical (decompiled payout table: 12,6,4,2,1 segments) |
| Range | ~1% | 10,630 bets | Fair | Full dataset, 31.5% win rate matches thresholds |
Other verifiable claims
| Claim | Status | Evidence |
|---|---|---|
| Chainlink VRF randomness | Verified | 393K fulfillments, chi-square PASS on 275K outcomes |
| ZK poker shuffle fairness | Verified | Groth16 proofs before dealing, 4 verifier contracts |
| Deflationary tokenomics | Confirmed | NativeMinter precompile disabled (no post-genesis minting). Blackhole 0x010...000 holds 8.99 CX in burned fees. RewardManager precompile enabled. |
Dice: The 5.93% observed edge (10,055 bets) is statistical noise around the 3% theoretical. The payout formula (6/n) × 0.97 × bet yields exactly 3% edge regardless of how many faces are selected. Red-team review confirmed this is not player strategy — it is plain variance.
Wheel: EDGE_BPS=0 in contract storage does NOT mean zero edge. The 4% edge is embedded in the payout table (5 segments: 12×2x, 6×4x, 4×6x, 2×12x, 1×24x = EV 0.96 per spin), not applied as a runtime deduction. Observed 6.91% reflects normal variance around 4%.
Range: The small-sample 38.75% edge was disproven by full-dataset analysis (10,630 bets). Actual win rate (31.5%) matches expected rate from chosen thresholds (29.3%). The game is fair at ~1% edge.
Why v2 events are empty
The BetPlaced event was always empty — even in v1. The rich bet data (player, type, amount) came from a separate BetQueued event emitted by the Executor contract's execute() path, where each bet was an individually signed meta-transaction carrying the full bet parameters in its calldata.
V2 replaced this with session-based account abstraction. Players authorize a session key once, and the relay bot calls startNextRound() with zero parameters — just the 4-byte function selector. The game contract pulls bet details from its own state (pre-registered via session-authorized calls). There is no bet data in the transaction to emit. This isn't data being stripped for privacy — it's an architectural shift from per-bet signed transactions to session-authorized account-based betting.
RouletteBetPlaced events still fire for every active round. Cross-referencing RoundBetsClosed events confirmed that all 4,531 rounds with actual bets have full event coverage. The apparent "opacity" was 91.6% idle rounds (bot spinning with no players), not hidden economic data.
What the docs claim vs. what the chain shows
| Claim | Official Docs | On-Chain |
|---|---|---|
| CX token supply | 1 billion | CX ≠ FAIR. FAIR ERC-20 = 111M. CX is the native gas token (genesis supply not queryable via RPC, but NativeMinter is disabled). |
| Node licenses | 1,000 total | 591 minted |
| CoinFlip house edge | 3% | 3.43% verified (fair) |
| Dice house edge | 3% | 5.93% observed (statistical noise around 3% theoretical) |
| Deflationary model | "No new mints post-genesis" | Confirmed: NativeMinter precompile disabled. 8.99 CX burned to blackhole address. |
Data visibility
Cross-referencing RoundBetsClosed events resolved CX Chain's biggest data question. What appeared to be "opaque relay-path rounds" turned out to be idle rounds — the bot spinning with no players. For rounds with actual bets, event coverage is complete:
| Data | Non-Roulette Games | Roulette (Active Rounds) |
|---|---|---|
| Round outcome | Visible | Visible |
| Player identity | Visible (Treasury events) | Visible (RouletteBetPlaced) |
| Bet amount | Visible (Treasury BetPlaced) | Visible (RouletteBetPlaced) |
| Bet type | Contract state | Visible (RouletteBetPlaced) |
| Payout | Visible (stAVAX Transfers) | Visible (HouseFeeCollected + PayoutSent) |
| House fee | Visible (HouseFeeCollected) | Visible (HouseFeeCollected) |
For all active roulette rounds, RouletteBetPlaced events provide round_id, player, token, bet_type, and amount — 4,531 of 4,531 active rounds covered (100%). The remaining 83,306 rounds (91.6%) are idle bot spins with no economic activity to report. The chain is both a provably fair random number generator and a complete economic ledger for all games with actual betting activity.
Data transparency by flow
8. Key Discoveries
Late-stage analysis resolved every major open question and fundamentally changed the understanding of CX Chain's data model.
The idle round discovery
The single biggest correction in the investigation. For months, ~64.5% of roulette rounds were classified as "opaque relay-path rounds with hidden economics." A single event check found a simpler explanation: they were empty.
The RoundBetsClosed event fires only when at least one player bet in a round. Comparing this against RoundResolved counts revealed the gap:
| Contract | Total Rounds | Active Rounds | Idle Rate |
|---|---|---|---|
| Roulette v2 (Primary) | 54,673 | 4,567 | 91.6% |
| Roulette v2 (Secondary) | 33,233 | 33 | 99.9% |
For the 4,531 active rounds, RouletteBetPlaced events exist for 100.0% (4,531 of 4,531). There is no hidden economic activity. The bot simply keeps spinning whether or not anyone is playing — each idle spin costing ~$0.011 in VRF fees.
Upgrade-window data recovery
A double contract upgrade between blocks 662,358 and 662,436 (78 blocks) left an unexpected artifact: rounds 34,973 through 41,979 retained persistent player and bet data in contract storage that was never cleared. Using archive RPC calls to playersInRound() and getPlayerBets(), 1,127 relay-path rounds were recovered with full bet data — providing the third independent house edge measurement (1.39%).
Three implementation versions were identified in the upgrade window:
| Implementation | Role |
|---|---|
0xd4a5fc9d | Original implementation (pre-upgrade) |
0xf4152267 | 78-block intermediate (upgrade window) |
0x7467afe3 | Current production implementation |
Secondary roulette: a separate world
The secondary roulette contract (0x6e427d44) is not a backup or overflow for primary — it is a distinct player population with zero address overlap. Of 33,155 rounds, only 33 had any bets (99.9% idle). Nine unique players identified, none of whom appear in the primary contract's player set. It uses a different implementation contract and remains active despite near-zero usage.
Platform P&L
With the idle-round cost quantified, the platform's overall economics become clear:
| Item | Amount |
|---|---|
| House edge revenue (stAVAX gaming) | +~$757 |
| Poker rake revenue | +~$1,208 |
| VRF costs (393K fulfillments) | -~$4,233 |
| Infrastructure gas costs | -~$3,696 |
| Estimated Net P&L | -$5,907 |
The platform is currently unprofitable, burning more on VRF and gas than it earns from house edge and rake. The stAVAX bankroll's passive staking yield (~$22K earning ~5% APY) partially offsets this, but the idle-round VRF spend is the clearest optimization target.
9. Open Questions
The fairness question is settled: three independent methods confirm roulette runs at 1.4–1.9%, and all games have 100% event coverage for active rounds. The remaining questions are about the business, not the math.
What to watch
- Secondary roulette — a separate player population (zero overlap with primary), different implementation, 33K rounds but only 33 active. Why does it exist? Who plays it?
- Poker adoption — the ZK architecture is genuinely novel. 353 hands isn't traction, but the infrastructure is ready. Deployment paused March 3.
- Idle round economics — the platform burns ~$4,233 in LINK fees on VRF calls for empty rounds. The bot should check for registered bets before requesting randomness.
- Platform P&L — estimated at -$5,907 loss when accounting for VRF costs against house edge revenue. The stAVAX bankroll's passive staking yield partially offsets this.
- Player retention — 89.5% churn is severe. 202 unique addresses all-time, ~25 in production. The gasless UX is good; the question is whether anyone wants to play.
- cxAVAX vault — an ERC-4626 yield vault was deployed but appears unfunded. DeFi expansion beyond pure gaming?
10. Methodology
This report was produced using parallel AI agent teams querying MongoDB blockchain data, decompiling contract bytecode, reading contract storage via archive RPC, and red-teaming each other's findings. Key tools:
- 68 unique events decoded across 29 contracts
- 306 tests validating decoders, ontology, and classification logic
- 47 contracts in a typed entity registry across both chains
- 7 evidence-backed flow models with data availability annotations
- 8 analytics scripts for ongoing monitoring
The investigation corrected itself repeatedly. The initial thesis ("CX Chain is an opaque outcome oracle") was disproved when event archaeology found economics data that had been missed. The biggest correction: what was assumed to be a "relay-path gap" (64.5% of rounds with no bet data) turned out to be idle rounds — the bot spinning with no players. This single finding changed the data visibility story from "partially opaque" to "100% covered for active rounds." Every correction came from validating against live chain data, not from documentation or assumption.
Changelog
- 2026-03-23
-
- CX ≠ FAIR: The original report conflated CX (native gas token, 1B supply, deflationary per docs) with FAIR (ERC-20 play-money chip, 111M supply, mintable). The docs-vs-chain "CONTRADICTS" claims were wrong — they tested FAIR's mint() against CX's deflationary promise. Corrected to "Unclear" pending native token verification.
- USDC roulette removed: The C-Chain USDC roulette contract (0x2d22dc28) was attributed to CX Chain by inference from the app interface. CX Chain team confirmed it is not their product, and on-chain evidence supports this (different deployer, no shared addresses). Real-money volume adjusted $41.3K → $38.3K.
- Deflationary tokenomics confirmed: RPC verification shows NativeMinter precompile is disabled (no post-genesis CX minting possible). Blackhole address
0x010...000holds 8.99 CX in burned gas fees. RewardManager precompile is enabled. Block rewards go to0x28937f51(top CXNL holder / rake recipient). The deflationary claim applies to CX (native gas token), not FAIR (ERC-20 play money).