Inside CX Chain

An on-chain intelligence report on Avalanche's provably fair gaming subnet

Chain 737373 · Avalanche L1 · March 2026 · Updated 2026-03-23

725,029 Transactions 100% classified
$38.3K Real-Money Volume stAVAX since Feb 15
202 Unique Players All-time gaming addresses
276K Game Rounds 276,299 VRF-resolved
~1.9% Roulette House Edge Triple-validated, 19,367 bets
353 Poker Hands ZK-SNARK fairness
110M FAIR Tokens Free-play chips, no market
591 Node Licenses CXNL validator NFTs

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 key insight: Three independent measurement methods — event-path analysis (19,367 bets), Treasury accounting (5,320 bets), and upgrade-window storage recovery (1,955 bets) — all converge on a roulette house edge of 1.4–1.9%, consistent with the 2.70% theoretical European roulette edge. 91.6% of roulette rounds are idle (bot spinning with no players). For the rounds that matter — where real bets were placed — event coverage is 100%.

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

LayerChainWhat It Does
Settlement + EconomicsCX Chain (737373)Game outcomes, round resolution, poker hands. All games: full bet economics visible for active rounds (100% event coverage).
VRF + AccountsC-Chain (43114)VRF randomness generation, player account balances
ConsensusP-ChainValidator 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:

~7,000 VRF round-trips / day Consistent, 24/7
~300K ICM messages / month Requests + responses + acks
393K Total VRF fulfillments Since chain genesis
16s Median round-trip CX → C-Chain → CX

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)

0 50K 100K 150K Oct Nov Dec Jan Feb Mar 63K 76K 101K 113K 107K 147K v2 migration
CX Chain monthly transaction volume. V2 migration in February caused a brief dip before March recovery.

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

DateEvent
May 2025Chain genesis. FAIR token deployed. Initial game contracts (v1).
Sep 2025Phase 1 betting begins via ICTT cross-chain transfers.
Oct 2025Phase 2: direct FAIR betting. Activity ramps to 63K txs/month.
Dec 2025Poker tables deployed (Wave 1). ZK Groth16 verifiers live. 100K txs/month.
Feb 6-11, 2026V2 migration. All v1 contracts retired. 10 UUPS-upgradeable game proxies deployed. ERC-4337 Account Abstraction replaces GSN meta-transactions.
Feb 2026stAVAX introduced as real-money betting token.
Mar 2-3, 2026Poker Wave 3: 6 tables on latest implementation. Then deployment pauses.

Three platform phases

PhasePeriodTokenVolumePlayers
TestSep 30, 2025 – Feb 11, 2026FAIR414,871 FAIR wagered200+
TransitionFeb 6–15, 2026v2 contracts + stAVAX
ProductionFeb 15, 2026 – presentstAVAX$38,274 real money~25
FAIR is dead. No FAIR bets have been placed since Feb 15, 2026. stAVAX is the production gaming token on CX Chain. The test phase generated impressive transaction counts but zero real economic value.

Infrastructure shift

17K ERC-4337 txs/mo Up from 0 in January
456 Meta-tx/mo (legacy) Down from 11K
171 Contracts deployed Since Jan 1, 2026
0 V1 txs in March Migration complete

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).

GameTypeOutcomesAll-Time RoundsActive RoundsShare
Roulette (Primary)Multiplayer0-3654,5244,56762.1% (v2)
Roulette (Secondary)Multiplayer0-3633,1553337.8% (v2)
DiceSingle-player1-63,623359 (v2)1.3%
WheelSingle-player0-2420,165308 (v2)7.3%
CoinFlipSingle-player0-1203203 (v2)0.07%
RangeSingle-player0-9810,609177 (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.

13 Tables EIP-1167 proxies
353 Hands Played 45 unique players
5.00% Rake Contested pots only
8 Impl Versions Rapid iteration

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

TokenTypeSupplyUSD ValueTransfers
FAIRFree-play chips111,000,100$0 (mintable, no market)43,969
stAVAXReal money2,330~$22,10018,419
Native AVAXGas token389~$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

HolderFAIRstAVAXRole
House Relay99.08M~0Master bankroll
Treasury2,157.71stAVAX payouts
GamePool v210.00M3.17FAIR accounting
GamePool v11.10MLegacy (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)

$38.3K Total real-money volume stAVAX gaming + poker
$7.7K/wk Weekly run rate ~5.4 weeks of data
$14.1K stAVAX gaming 6,266 bets, 5 players
$24.2K stAVAX poker 297 hands, pot volume
ChannelVolumeBets/HandsPlayersEdge
stAVAX gaming (CX Chain)$14,1226,266 bets51.83% (roulette), 5.36% (blended)*
stAVAX poker (CX Chain)$24,152297 hands~255% 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:

CX Chain startNextRound()

Bot triggers round. BetPlaced emitted (empty data). VRF request sent via Teleporter.

↓ ICM
C-Chain VRF Request

Teleporter delivers to VRF Consumer. LINK paid to Chainlink VRF v2.5 Coordinator.

↓ Chainlink
C-Chain VRF Fulfillment

Single Chainlink node generates random word. BatchVRF sends result back via Teleporter.

↓ ICM
CX Chain RoundResolved + settleToken

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

ComponentImplementation
Card encoding52 points on BabyJubJub elliptic curve (SNARK-friendly)
EncryptionElGamal with aggregated player public keys
Shuffle proofGroth16 ZK-SNARK (4 verifier contracts per game phase)
Card revealPer-street decryption key exchange
Timeout60 seconds per action, deposit slashing
Server modeshuffleAsServer() with identical ZK verification

Account abstraction

Players never hold gas tokens. The platform uses ERC-4337 smart wallets with scoped session keys:

ConstraintValue
Max target contracts4
Max function selectors12
Value transfersZero only (no fund extraction)
ScopeBound to specific game/table IDs
ExpirationTimestamp-limited

6. The Players

CX Chain has an infrastructure problem: the bots outnumber the humans.

Address TypeMonthly TxsShare
House Relay (bot)~80,00055%
VRF Oracle (bot)~50,00034%
Secondary Bot~15,00010%
All players combined~2,0001.4%

Of 202 unique gaming addresses all-time (~25 in production):

CohortCountBetsBehavior
New7230Tried once, minimal activity
Regular447,320Steady moderate play
One-shot1846Played once, never returned
Grinder822,46973% 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:

RoleAddressActivity
Primary Bot (uptime proofs)0xeedf0b342,326 txs
Validator Registrar0x744d5f7e625 txs (206 of 243 registrations)
Delegator Operator0xc786979f634 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

LicenseSupplyHoldersTop Holder
CXNL (Node License)591500x28937f51 (282 NFTs)
CXHOL (Operator License)30430xc786979f (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

MethodEdgeSampleSource
Event-path (bet events + outcomes)1.90%19,367 betsRouletteBetPlaced + RoundResolved matching
Treasury-path (TreasuryBetPlaced + PayoutSent)1.83%5,320 betsPool accounting events
Relay-path storage (upgrade-window recovery)1.39%1,955 betsContract 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

GameObserved EdgeSampleAssessmentEvidence
Roulette (CX, stAVAX)1.90%19,367 betsFairEvent-path, 100% active-round coverage
CoinFlip3.43%167 betsFairTreasury BetPlaced + RewardPaid
Dice5.93%10,055 betsFairStatistical noise (3% theoretical, hardcoded payout)
Wheel6.91%2,804 betsFair4% theoretical (decompiled payout table: 12,6,4,2,1 segments)
Range~1%10,630 betsFairFull dataset, 31.5% win rate matches thresholds

Other verifiable claims

ClaimStatusEvidence
Chainlink VRF randomnessVerified393K fulfillments, chi-square PASS on 275K outcomes
ZK poker shuffle fairnessVerifiedGroth16 proofs before dealing, 4 verifier contracts
Deflationary tokenomicsConfirmedNativeMinter 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.

Resolved: While V2's session model changed how bets are submitted, 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

ClaimOfficial DocsOn-Chain
CX token supply1 billionCX ≠ FAIR. FAIR ERC-20 = 111M. CX is the native gas token (genesis supply not queryable via RPC, but NativeMinter is disabled).
Node licenses1,000 total591 minted
CoinFlip house edge3%3.43% verified (fair)
Dice house edge3%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:

DataNon-Roulette GamesRoulette (Active Rounds)
Round outcomeVisibleVisible
Player identityVisible (Treasury events)Visible (RouletteBetPlaced)
Bet amountVisible (Treasury BetPlaced)Visible (RouletteBetPlaced)
Bet typeContract stateVisible (RouletteBetPlaced)
PayoutVisible (stAVAX Transfers)Visible (HouseFeeCollected + PayoutSent)
House feeVisible (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

Non-Roulette Games 10 visible 95% CX Roulette (active) 11 visible 100% Poker 8 visible 89% stAVAX Bridge 4 visible 100% ERC-4337 7 visible 88% Validator Reg. 8 visible 100% Node License 6 visible 100%
Data fields visible in on-chain events (green) vs hidden in contract state (red), per transaction flow. Source: ontology flow models with evidence-backed annotations.

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:

ContractTotal RoundsActive RoundsIdle Rate
Roulette v2 (Primary)54,6734,56791.6%
Roulette v2 (Secondary)33,2333399.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:

ImplementationRole
0xd4a5fc9dOriginal implementation (pre-upgrade)
0xf415226778-block intermediate (upgrade window)
0x7467afe3Current 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:

ItemAmount
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

Bottom line: CX Chain is a provably fair gaming platform with triple-validated house edges. Roulette runs at 1.4–1.9% across three independent measurement methods — consistent with 2.70% theoretical European roulette. Every active round has 100% event coverage; the "opacity" previously reported was idle bot spins, not hidden economics. The platform has processed $38,274 in real-money volume since transitioning to stAVAX on Feb 15, 2026, but operates at a loss (-$5,907) when VRF costs are factored in. With 202 unique players all-time and ~25 in production, it remains a well-engineered casino still searching for scale.

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:

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.

Source: cxchain analysis package · 68 events decoded · 307 tests · 10 ontology domains · Data: MongoDB, EVM Decompiler, Archive RPC, Routescan, CX Chain RPC

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...000 holds 8.99 CX in burned gas fees. RewardManager precompile is enabled. Block rewards go to 0x28937f51 (top CXNL holder / rake recipient). The deflationary claim applies to CX (native gas token), not FAIR (ERC-20 play money).