How Arcomarket works
A plain-language walkthrough for anyone about to place a bet: how the pools work, how a market gets settled, what it costs to exit early, and what's still true about where the product stands today.
What Arcomarket is
Every market on Arcomarket is a yes/no question about a price: will an asset be at or above (or at or below) some threshold at a specific time. There's no order book and no market maker. Instead, everyone who bets YES puts USDG into a YES pool, everyone who bets NO puts USDG into a NO pool, and at resolution the winning pool splits what the losing pool leaves behind. This is the parimutuel model, the same structure a horse-race tote board uses.
That has two consequences worth knowing up front. First, there's no house: the protocol never funds a payout out of its own money, so there's no position it can be wrong about, and a new market is tradeable the moment two people, one on each side, have bet. Second, odds are just the pool ratio. If $300 sits on YES and $100 sits on NO, the displayed odds are simply total pool divided by your side's pool: YES is priced at roughly 1.33x (400/300) and NO at 4x (400/100). Watching that ratio move as bets land is the entire pricing mechanism. No oracle is consulted until the market actually settles.
The life of a market
Every market moves through the same stages, in the same order, every time.
- 1
Open for bets
Anyone can stake USDG on YES or NO. The minimum bet is 1 USDG. Odds move with every bet, since they're just the live pool ratio.
- 2
Cash-out window (optional)
Up to 1 hour before the market locks, a bettor can exit early for 80% of their stake. See Cashing out below.
- 3
Locked
At lock time, betting and cash-out both stop. The market sits locked until its resolve time.
- 4
Resolved (or voided)
Once the resolve time has passed, anyone can settle the market from the price feed. A market that ends up one-sided, or whose feed never produces a usable price in time, voids and refunds instead. See Settlement and Grace windows.
- 5
Claim
Winners claim their share of the pool. Refunds from a voided market are claimed the same way. Both are instant and on-chain: nobody approves a claim, there's no dispute window.
Payouts: the vig comes out of the losing pool
Arcomarket's fee (the "vig") is charged only against the losing pool, never against the total money in the market. At resolution:
your payout = your stake × distributable / winning pool
The standard vig is 4% of the losing pool (markets can set a different rate, up to a 10% cap). Because distributable is always at least as large as the winning pool, a winner can never receive back less than they staked, no matter how lopsided the market was. That's not just a design goal; it's an invariant the contract's test suite checks by brute-force fuzzing across randomized pool sizes and fee settings.
Worked example
A $100 stake on the winning side comes back as $196: the original stake plus a pro-rata share of the losing pool, minus the fee. Charging the fee on the losing pool instead of the total pool is the specific choice that rules out a winner ever getting back less than they put in, even on a heavily one-sided market.
Settlement: the first price after close, not the latest
Markets settle from a Chainlink price feed. The naive way to do this, reading "whatever the price is right now" when someone calls resolve, has a real problem: the window to resolve a market can run for hours. Inside that window, whichever side is currently losing has every incentive to simply wait for the price to cross back over the threshold and resolve at that exact moment, while the winning side has to rush to resolve immediately or risk losing its win. That's a free option for the losing side, not a fair settlement.
Arcomarket closes that option by requiring the first Chainlink price update at or after the market's resolve time, not the latest one. The contract itself checks this on-chain: it confirms the price it's given is timestamped at or after the resolve moment, and that the price immediately before it is timestamped strictly earlier. If both hold, that price is provably the first one available, and there is no other price anyone can substitute. The result: it makes no difference whether a market is settled one second or twenty hours into its window, everyone gets the identical outcome, so there's no price left to shop for.
Settling is permissionless. Anyone can look up the correct price round from the feed's public history and call resolve, so the market doesn't depend on any single party showing up to settle it.
Grace windows, and what happens if a market can't settle
Every market has a limited window after its resolve time in which it can actually be settled, and that window is sized to the kind of feed it settles from:
Tokenized equity feeds only update during trading hours and go quiet over the weekend, so the window has to be long enough to bridge a normal Friday-to-Monday close.
A market that locks right before a market holiday gets the longer window, so a three-day weekend doesn't eat the whole grace period.
Crypto feeds update continuously, so a much shorter window is enough. If one goes quiet for 2 hours, that's a real incident worth surfacing quickly, not a calendar artifact.
If a market can't be settled inside its window, whether the feed never printed a usable price, the keeper had an outage, or trading on the underlying was halted, anyone can void it. A voided market refunds every bettor's full stake. No fee is taken. Refunding, not guessing, is the deliberate response whenever a market can't be settled fairly.
Cashing out early
Before a market locks, you can exit a position early instead of riding it to resolution. Three rules govern it:
- 1
20% penalty
You get back 80% of your stake; the other 20% goes to the treasury. Say you'd staked $50: cashing out returns $40, and $10 is kept as the penalty.
- 2
Closes 1 hour before lock
The window shuts an hour before the market locks. This stops someone from watching the price all the way to the wire and then walking a losing stake back out for 80% cents on the dollar right as the outcome becomes obvious, which would otherwise come straight out of the winning side's payout.
- 3
Can't be used to void a live, two-sided market
If a market currently has money on both sides, you can't cash out in a way that would empty one side entirely. Without this, the last bettor on a side could exit, force the market one-sided, and effectively cancel the other side's winning position for a 20% fee. A market that's already one-sided can still be exited freely: it was headed for a void anyway.
There's no exit after lock. Once a market locks, you're in until it resolves or voids. Allowing exits between lock and resolution would let the losing side see the outcome coming and walk away with 80% instead of nothing, leaving the winning side with almost no pool left to claim from, the opposite of what a parimutuel market promises.
The rules, in short
Stakes are USDG
All stakes and payouts are in USDG (6 decimals). The minimum bet is 1 USDG, which exists to block dust positions whose only purpose is to occupy a side, farm rewards, or skew the displayed odds for free.
One-sided markets void
A market that locks with money on only one side (or none at all) can't be settled fairly, so it voids and refunds every bettor in full instead of resolving.
Everything user-facing is permissionless
Anyone, not just Arcomarket, can call resolve on an eligible market, void one that's expired, claim a payout, or cash out a position. No admin key sits between you and your funds, and there's no proxy and no pause switch over user balances.
Oracles are allowlisted by the owner
A market can only settle against a Chainlink feed the contract owner has explicitly approved. That means a compromised operational key could at worst create a low-quality market (which simply voids if nobody bets it sensibly), never point a market at a price feed it controls to drain a pool.
Where things stand
Not audited by a third party
The contracts have been through an internal security review, not an independent external audit. Don't read anything on this page as a claim that the contracts are audited or safe to use with real funds.
Deployed on Robinhood Chain
PredictionMarket is live at 0x65444e6571a101bbA0D344D5dC9C2eE0849E5b8a and $ARCO at 0x50354ECd5458914FC9B0511F23e8E0cBDfA24956. Verify both on Blockscout before trusting any address you did not paste yourself. Addresses are announced only from Arcomarket's official account.
Questions, answered
Do I need to seed liquidity to open a market?
No. Arcomarket is parimutuel: the first YES bettor and the first NO bettor already make the market work. There's no market maker and no liquidity pool for anyone to fund.
Can I lose more than my stake?
No. The most you can ever lose on a bet is the amount you staked. The payout math guarantees a winner never receives back less than they staked, on any pool ratio or fee setting.
What happens if everyone bets the same side?
The market can't be settled fairly with no losing pool to fund a payout, so it voids instead of resolving. Every bettor gets a full refund and no fee is charged.
Why doesn't resolve just use the current price?
Because the grace window can run for hours, and "whatever's current" would let whoever is losing simply wait for a better price and settle then. Resolution is pinned to the first oracle price at or after the market's resolve time instead, so the outcome can't be timed or shopped for.
What if the price feed never updates during the grace window?
The market voids and refunds in full. A missing price is treated as a reason to give everyone their money back, never a reason to guess or wait indefinitely.
What do I bet with?
USDG. Stakes use 6 decimals and the minimum bet is 1 USDG.
Is Arcomarket audited?
Not by a third party yet. The contracts have been through an internal security review, but no external audit has happened and nothing has been deployed to any network. See "Where things stand" below.
Want the contract-level detail?
This page is deliberately a bettor's guide. The full technical reference, the contract source, the security notes, and the operational runbooks, lives in the project's repository.