Theme
Fee and affiliate settings, and the rest of Settings
Admins change the platform's settings on the Settings page without a deploy. Nothing is sent until Save, which lists every change (old and new value) for confirmation; every change is written to the audit log, and customers see it on the site within about 30 seconds. Money is typed in dollars and stored exactly; rates are typed as percentages and stored as whole basis points.
Trading fee
| Setting | Default | What it does |
|---|---|---|
Fee rate (fee.tradeBps) | 5% | Charged on the buyer of every fill, as a share of what they pay. At most 20%. Frozen onto each order at placement. 0% charges nothing and pays no commission |
Profit cap (fee.maxProfitShareBps) | 50% | The fee is never more than this share of what the bet can win, so a share bought at 95¢ pays less than the full rate. The page says where the cap starts to bite |
Exempt the house (fee.exemptHouse) | on | The house market maker pays no fee |
The exchange's fee ceiling must never be below the fee rate
With trading from wallets, the CTF Exchange contract has its own ceiling on the fee the operator may charge per fill, maxFeeRateBps, set when the exchange was deployed (EXCHANGE_MAX_FEE_RATE_BPS, 500 = 5% by default) and changeable only by the owner Safe (setMaxFeeRate). The platform's fee rate must never exceed it. A fee above the ceiling makes the exchange refuse every buy: every match fails on chain and every trade is undone.
To raise the fee rate above the ceiling: have the Safe's signers call setMaxFeeRate on the exchange to the new rate first, then raise the Fee rate here. To lower it, lower the rate here first and the ceiling after, or leave the ceiling where it is. Keep the ceiling equal to the rate: the ceiling is also what a stolen operator key could charge every customer, so a ceiling above the rate is pure risk. Check the current ceiling with getMaxFeeRate() on the exchange's page on BscScan. See Keys and roles.
Affiliate programme
| Setting | Default | What it does |
|---|---|---|
Commissions on (affiliate.enabled) | on | The master switch. Off, no commission is recorded on any trade |
Upline's share of the fee (affiliate.shareBps) | 50% | How much of each fee goes to the trader's upline; the rest stays with the platform |
Split across the three levels (affiliate.levelBps) | 50 / 30 / 20 | Level 1 is the direct referrer, level 2 theirs, level 3 theirs again. Together at most 100%; anything unassigned stays with the platform |
Levels paid by default (jurisdiction.default) | 3 | For countries with no rule of their own |
Countries with their own terms (jurisdiction.rules) | none | Per country: how many levels are paid (0 to 3), optionally its own share and split for bets its traders place, and a staff note (counsel's advice, licence status, date reviewed) |
The page works out what the rates mean for one bet as you type: at the defaults, 1.25% of each bet to level 1, 0.75% to level 2, 0.50% to level 3. A level is paid only if both the trader's and that affiliate's country allow it; what is not paid stays with the platform. Commissions are a share of fees already paid, never issued credits.
With trading from wallets, commissions are paid out of the fee vault when a referrer presses Collect; the vault's per-payout and daily limits are set on chain by the Safe, not here (Recurring tasks). Without a fee vault configured, no commission is recorded on wallet trades and every fee is the platform's.
Resolution
Dispute window (resolution.disputeWindowMinutes, default 120): the floor every proposal gets. A resolver cannot propose with a shorter window; an admin can. Set it to what holders need to notice and dispute. See Resolving and disputes.
Play money, Demo and growth
- Play money: starting credits ($1,000), the daily top-up ($500) and the balance below which it is offered ($100).
- Demo mode: on or off, and its starting virtual money ($10,000). Off hides the Live | Demo switch.
- Growth: the referral bonus ($50, play money), the daily check-in bonus ($5) and the streak's length (7 days).
Site and features
- Banner: a notice across the top of every page, with a tone (notice or warning) and an optional link (a path on the site or an https address). "Markets on the Kenyan election close at 18:00 EAT on polling day."
- Suggestions and Comments: switch either part of the site off without a deploy.
Categories and countries
What customers browse by, in the order you put them in. Each row has a switch and up and down buttons.
| Setting | Default | What it does |
|---|---|---|
Categories (browse.categories) | all nine, Politics first | The categories the site's category bar and footer, the Telegram Mini App, the app and the suggestion form list, in this order. At least one stays on |
Country markets (browse.countries) | Nigeria, Kenya, South Africa, Ghana, Egypt, Uganda, Ethiopia, Tanzania | Listed after the categories, each as its flag and name in the customer's language, opening that country's markets: every event whose country codes name the country. May be none |
Switching a category off takes it out of every customer-facing list and picker, and the API refuses a new suggestion in it. It hides no market: events already in the category stay tradable, open by their link, in search, in Trending and in every "All" list, and a link with ?category= still filters, so nobody holding a position loses sight of it. Staff can still create and edit markets in a switched-off category; the forms mark it "(hidden)". The AI listing scout is told only the categories that are on and asked to favour the country markets that are listed.
The home page's category shelves and the footer's market links are the first five categories that are on.
AI
- AI listing ideas (
ai.listingIdeas, on): every two hours the AI drafts listings for staff to list or dismiss on the AI ideas page. Off stops new drafts; the ideas already drafted stay. - Automatic resolution (
ai.autoResolve, on): once an event has closed, the AI looks for its result and proposes it; the dispute window runs as for any proposal, but at least 12 hours long (the platform's window when that is longer). Off stops new looks and proposals.
Both do nothing until the operations team has set the API's ANTHROPIC_API_KEY. See The AI: listing ideas and automatic results.
Crypto (USDT)
The Crypto (USDT) section (networks, minimum deposit and withdrawal, withdrawal fees, auto-approval limits, two-step for money moves, pause withdrawals, the declared reserve, the payout-wallet cooling-off) belongs to the vault model, in which customers paid into Jua's vault and withdrew from it. With trading from wallets there are no deposits or withdrawals, and these settings do nothing to trading; keep two-step for money moves on regardless, and leave the rest alone unless the vault is still running for balances from before the switch.
Telegram
The Mini App's switches (open or paused, the bot's messages, announcements in Telegram, its banner) are on the Telegram page beside the bot's status: Telegram.
Settings that need a deploy
Everything else about a deployment (the fee vault, the exchange and its chain, the TON exchange, alert webhooks, the Telegram bot's token) is an environment variable or secret, changed by whoever operates the platform: Deploying.