← Home

FAQ

Last updated 2026-05-08. Technical content — assumes familiarity with wallets, USDC, and on-chain transactions.

About

What is Clarity?

Clarity is a prediction market exchange. Markets are binary YES/NO contracts that resolve based on a published settlement source — a price level on Hyperliquid, an oil-price tick, daily Polymarket crypto-volume, etc. Settlement is on-chain: positions are recorded in a smart contract on Base mainnet and pay out in real USDC.

The matching engine is off-chain (a single Python service) for speed and zero-fee-per-trade economics. The contract is the source of truth for who owns what shares and what the resolution outcome was.

How does the YES/NO model work?

Every market resolves to exactly one of YES ($1 per share) or NO ($0 per share). To take a position you can:

There is one order book per market (the YES book). NO trading happens implicitly — selling YES @ 60 ¢ is buying NO @ 40 ¢.

How do prices map to probabilities?

The YES price in cents is the implied probability of YES resolution, in percent. A YES share trading at 67 ¢ implies the market believes there's a 67% chance of YES resolution. Buying at that price is profitable if the true probability is higher than 67%, accounting for fees.

Trading

How does trading work?

The matching engine implements a price-time-priority order book — best price wins, ties broken by who arrived first. When two orders cross (your buy ≥ someone's resting sell), they match at the resting price. Both sides post collateral upfront equal to their maximum loss, so a settled trade always nets to exactly $1 per resolved share, distributed by outcome.

Prices are integers from 1 ¢ to 99 ¢. Quantities are positive integers. There's no leverage and no margin.

What order types are supported?

No stop-loss / IOC / FOK / iceberg orders yet.

What's the fee structure?

Trading: a 5 bps (0.05%) taker fee on notional value, charged only to the order that crossed the book (the taker). Resting orders that get filled pay nothing. So a $100 trade costs the taker 5 ¢ in fees.

Custodial deposits: the actual gas the system spent to credit your deposit, with a floor of 1 ¢ (or 2 ¢ for gasless / EIP-3009 deposits, since they require an extra relay tx). Typical real cost on Base is well under 1 ¢, so most deposits land at the floor.

Withdrawals: the actual gas the system spends to send your USDC out, similarly with a small floor.

There is no deposit-to-trade conversion fee, no inactivity fee, no withdrawal-percentage fee.

What happens if I trade against myself?

The engine prevents self-fills. If you place an order that would match against your own resting order, the resting order is cancelled and your collateral is refunded — your new order is then placed normally. This is the "cancel-resting" variant of self-trade prevention.

Deposits

How do I get USDC into Clarity?

Two paths, depending on whether your USDC is on Base and whether you have ETH for gas:

Wallet-mode users (signed in with MetaMask) can also deposit directly via the contract's deposit() function, but this is currently a less polished path.

How do custodial deposits work mechanically?

When you sign up with email, the platform generates a fresh Ethereum keypair and stores the private key encrypted with AES-256-GCM under a master key on the server. The address derived from that key is your custodial deposit address. You don't see or hold the private key.

When USDC lands at that address on Base, a sweeper service polls Transfer events, sees the inbound, and runs:

  1. Gas top-up from treasury → your custodial address (covers the next two txs)
  2. Approve the Clarity contract to spend the USDC
  3. Deposit to the contract: Exchange.deposit(amount − fee)
  4. Fee transfer: the small fee amount goes to the treasury wallet

Your off-chain balance is credited when the on-chain Deposited event is observed by the watcher. Total time from external send to balance credit: typically 30-60 seconds on Base.

How do gasless deposits work?

Native USDC on Base supports EIP-3009 — a signature-based transfer authorization. You sign a typed-data message that says "I authorize transfer of X USDC from me to recipient Y, valid until time T, with nonce N." No on-chain transaction, no gas.

The platform validates your signature, recipient (must be your own custodial address), time window, and (from, nonce) uniqueness, then submits an on-chain transferWithAuthorization(...) call from the treasury wallet. Treasury pays gas. The USDC lands at your custodial address; the existing sweeper then credits your balance with a 2 ¢ fee floor (vs 1 ¢ for direct deposits — the extra cent covers the relay tx).

This is the path to use if you have USDC on Base but no ETH to pay for a transfer.

My deposit shows "pending" — what should I do?

Most deposits clear within 60 seconds. If yours is taking longer, here's what to check in order:

  1. Confirm the on-chain transfer succeeded. Look up your tx on Basescan. If it failed (out of gas, wrong network, contract error), nothing reached the platform.
  2. Wait up to 5 minutes. The sweeper polls every ~30 seconds, and on-chain confirmation safety adds another delay. Public RPC flakiness can occasionally extend this to a few minutes.
  3. Below the dust threshold? Custodial deposits below 5 USDC are intentionally skipped — gas to sweep them would exceed the deposit value.
  4. Wrong network. Clarity is Base-only. USDC sent on Ethereum mainnet, Polygon, or Arbitrum will land at the same address but on the wrong chain. Recovery requires bridging — contact support.
  5. Still stuck after 10 minutes. Something is wrong on our end. Save your tx hash and reach out.

Withdrawals

How do withdrawals work?

From the header, click Withdraw, enter an amount and a destination Base address. The platform:

  1. Atomically debits your off-chain balance (and the small fee)
  2. Calls Exchange.withdraw(amount + fee) from treasury, releasing USDC from the contract
  3. Sends USDC.transfer(destination, amount) from treasury to your address
  4. Routes the fee to the treasury wallet

Typical end-to-end time: 10-30 seconds. There's a per-user limit of 3 in-flight withdrawals to prevent runaway accidents.

You can withdraw to any Base address, not just the one you signed up with. The platform refuses obviously-wrong destinations (zero address, the Exchange contract itself, the address the platform is sending from).

Settlement

When and how does a market resolve?

Each market has a published resolution rule — for example, "settles YES if the SPX index closed above the strike price at 16:00 UTC." When the resolution time hits and the settlement source publishes a final value, the platform calls Exchange.resolveMarket(market_id, outcome) on-chain.

From that moment, your YES shares (if winning) become claimable as $1 per share, and any open orders on that market release their collateral. Resolved positions get auto-claimed into your off-chain balance — there's nothing to manually settle.

Markets that never had a real on-chain trade are resolved off-chain only — no gas wasted on contracts no one used.

What data feeds power the markets?

Currently three:

Markets are auto-rolled by a manager service — when one expires, a fresh one opens with the next strike. No human intervention.

On-chain

What chains are supported?

Currently Base mainnet only. Native USDC on Base is the deposit / settlement / withdrawal currency.

Multi-chain support (Ethereum L1, Arbitrum, Optimism, Polygon) via CCTP + EIP-3009 is on the roadmap — gasless from any source chain, automatically bridged to Base. Arbitrum is the planned first addition.

Where's the contract? How do I verify it?

The Clarity Exchange contract on Base mainnet is at 0xb8734bc1bcc112183c7ce77cabbcae2c7e05dd20. Source is verified on Basescan — you can read the bytecode, ABI, and source side-by-side at:

basescan.org/address/0xb8734bc1bcc112183c7ce77cabbcae2c7e05dd20#code

Always confirm the contract address in your wallet's "approve" / "deposit" prompt matches this exactly before signing. Anything else is a phishing site.

The contract has not been formally audited.

Accounts

Why does Clarity offer email signup at all?

To make trying the exchange frictionless. Wallet-only signup is a real onboarding cost for users who haven't held a non-custodial wallet before. The email flow generates a wallet for you under the hood, encrypted server-side. You can deposit via your dedicated address (or via gasless EIP-3009 from an external wallet), trade with no signing per-trade, and withdraw to any Base address you control. The custodial path is intentional — speed-of-onboarding traded against trust assumption.

I want to self-custody. How?

Sign in via "Connect Wallet" instead of email. You'll trade as your own EOA — every order is signed by you, the platform doesn't hold a key for you. Same contract, same matching engine, same fees. Deposits go directly through the contract's deposit() function rather than via a custodial sweep.

Operations

What happens when something breaks?

Clarity runs on a single VPS with hourly database backups. The on-chain contract is the source of truth for positions and balances — if the off-chain service goes down, your USDC is still in the contract and recoverable.

Specific guarantees we don't make:

See the disclaimer for the full list of "what could go wrong."

Question not answered here? This is a personal project — reach out directly.