# Orb Live Leagues and business model

> Current status reviewed September 29, 2026. See [the release index](README.md) for shipped versus planned features, network, wallet signing and deployment boundaries. Older dated experiments below are retained as history.

## What is running

Live Leagues is a **no-stake, testnet-only** social prediction game. One wallet opens
a 15-minute BTC/USD round, other wallets pick up or down during the first 90
seconds, and anyone can settle against the Chronicle BTC/USD oracle deployed on
Monad testnet. A community round may only be opened by that community's onchain
owner; the open league is available to any wallet. `claim()` materializes a
wallet's settled/correct totals, globally and per community. Anyone can claim on
behalf of a participant. This is a portable pseudonymous record, not an identity
proof, unique-human count, prediction-market payout, or measure of trading skill.

The independent `public/league/` observer is a static bundle. It needs neither
an Orb account nor the Orb backend. It verifies chain ID, deployed runtime code,
registry code, oracle binding and block-pinned round/wallet state before showing
and exporting a snapshot. A public RPC remains necessary. The onchain community
registry still relies on Orb attestations to register a new community; already
registered ownership and rounds are independently readable.

Chronicle is a push oracle. `open()` requires an observation at most 120 seconds
old; otherwise the Start button is disabled. `settle()` accepts an observation
at or after the deadline and within the following hour. After the hour, a round
may be marked unresolved, never won or lost. This does **not** guarantee a price
at the exact deadline, and a caller can choose *when* within the settlement
window to submit the latest observation. It is acceptable for a free social
demo, not for stakes, valuable rewards, trading automation, or serious rankings.
A production contest would need an exact-time verifiable historical oracle
sample, anti-sybil controls, settlement liveness and a specialist contract audit.

## How Orb can earn revenue

Orb should remain free to join, talk, watch, play and carry a wallet record.
Revenue should come from optional products that create measurable value:

1. **Community Pro**: paid moderation, hosted bots, richer analytics, larger
   archives and creator controls. A provisional $19/month tier is a pricing
   experiment, not an enabled subscription or a revenue projection. Voice/video
   capacity and storage need explicit cost limits before pricing is fixed.
2. **Clearly labeled league sponsorships**: a brand or project pays for a
   featured season, and the community creator receives a share. An initial
   70% creator / 30% Orb split is a hypothesis to test. Sponsorship must never
   alter oracle data, scoring, membership rights or result ordering. Private
   chats and calls should not be ad inventory.
3. **Trading revenue share, only where permitted by the venue**: a disclosed
   referral or execution fee on *completed* real transactions can be explored
   with Perpl/partners. Never add hidden spreads, charge for cancelled orders,
   or infer that the current Perpl integration already pays Orb. Compliance,
   jurisdiction, venue agreement, and wallet security need review first.

The existing Arena reward-claim contract contains a 1% testnet fee, but no
real-fund revenue is live. Live Leagues takes no stake and collects no fee. We
should not monetize reputation through paid boosts, entry fees, or pay-to-win.

The MVP business experiment is to measure weekly active communities, members
returning after a league round, community-to-Pro interest, sponsored-season
interest, RPC/gas cost per resolved round, and SFU minutes/egress cost per active
community. A purchase or sponsor campaign should launch only after costs,
conversion and legal/partner terms are known.

## Demo and deployment

`npm run league:compile` builds the isolated contract artifact and portable
observer. `npm run league:test` exercises two independent local wallets,
staleness, organizer checks, one prediction per wallet, settlement and portable
stats. `npm run league:deploy:check` simulates a deployment to chain 10143;
`npm run league:deploy:testnet` resumes from a locally journaled transaction.
The Oracle/Orb application must receive only the public
`ORB_LIVE_LEAGUE_CONTRACT` address. The existing Órbita deployment and mainnet
are outside this feature.

Independent proof: copy `public/league/` to any static host and open
`watch.html?contract=<league-address>&round=<id>&wallet=<address>`. The main
Orb app links to this observer from every visible round. For the live demo,
two real testnet wallets need faucet MON for gas and a fresh Chronicle oracle
observation; local EVM tests do not prove a live Privy session or Monad speed.

Primary references: [Monad oracle directory](https://docs.monad.xyz/tooling-and-infra/oracles),
[Chronicle testnet contract list](https://docs.chroniclelabs.org/Developers/testnet),
[Monad testnet network information](https://docs.monad.xyz/developer-essentials/network-information/testnet).
