How it works

A claim in chat becomes a prediction market — escrowed, oracle-settled, paid in USDC on Base. Here is what actually happens under the hood.

The real flow from claim to payout

The core rule is simple: LLM proposes, deterministic objects dispose. One sandboxed SubZeroClaw agent drafts text and market JSON; Elixir objects own routing, buttons, deposits, chain calls, resolution, settlement, and refunds.

  1. 1 A claim is made in Telegram. tg_ingress applies roster, policy, and spam gates, then telegram_conversation_runtime feeds that conversation's isolated SubZeroClaw agent. The agent may draft only text and /workspace/draft.json.
  2. 2 The draft is checked twice. market_validator validates the agent's market JSON, and on mm:create the runtime re-reads and re-validates the workspace file before market_bet opens a collecting market. No market id, recipient, wallet, oracle, or chain action comes from the agent.
  3. 3 Participation and funding happen in DM. A public card can live in a group, topic, or DM, but amount pickers, deposit addresses, and confirmations go to the tapper's 1:1 Telegram DM. market_bet owns all deposit state and reads claim-bound addresses from EscrowVault.subAddressOf.
  4. 4 The funding gate decides deploy or refund. If both Yes and No clear the minimum, market_bet freezes the funded legs and sends them to market_creation. If a side never funds, the vault refunds and no market is deployed.
  5. 5 The coordinator owns chain work. market_creation asks market_resolution to prepare the oracle, deploys a Market clone through MarketFactory, and leaves it live/open on Base. Below graduation it is pari-mutuel; if the contract's threshold and price-band rules are met, the same market can graduate into curve trading.
  6. 6 Resolution is routed through fixed shards. market_resolution_shard_N workers handle end-date timing, next-tweet anchoring, submitted evidence retries, gateway concurrency, and exact outcome mapping. Results route back through market_resolution, never from a sandboxed agent.
  7. 7 Settlement or refund closes the loop. Market.Chain collects/locks funds, calls settle(0|1|2), and pushes payouts to winners or refunds everyone on terminal UNDETERMINED. Home chats get lifecycle status; participants get private DM lines.

Resolution

Micro Markets currently supports end-date and next-tweet market kinds. End-date markets resolve from fixed URLs or from allowed source domains after earliestResolutionDate. If the first verdict is UNDETERMINED, deterministic objects can open an evidence window until earliestResolutionDate + 7 days; the conversation agent may only propose a URL file, and objects choose the market, submitter, deadline, gateway attempt, outcome, and settlement.

Next-tweet markets do not point raw x.com or twitter.com URLs at the oracle. The shard anchors the latest original post, uses the host-owned Sorsa/X read provider to find the first newer original post, registers immutable evidence through the evidence-proxy, then resolves through the Micro Markets GenLayer oracle in event_before_deadline mode.

The app-side resolver, gateway HTTP contract, Sorsa/X reader, evidence-proxy client, and action-key idempotency are built. A fully live GenLayer/X setup still needs live gateway credentials, public evidence-proxy hosting, and live E2E verification; until then, this website labels unavailable live-only evidence instead of fabricating it.

Non-custodial escrow

Money never touches this website. When you tap a side, the bot sends a deposit card to your Telegram DM. The address is a unique, claim-bound escrow sub-address read from the market's configured EscrowVault; deposits are not hand-derived by the frontend or the LLM.

If one side never reaches the minimum, the vault refunds depositors directly and no market is deployed. If both sides fund, market_bet hands a frozen leg payload to market_creation; the coordinator never reads back into participation state.

Buy and sell only appear after a market graduates into curve trading. Pre-graduation markets are pari-mutuel participation flows, and this website still only hands the action to Telegram; it never signs, sells, settles, or redirects funds.

The money flow always runs in your 1:1 Telegram DM — not the group, not this site. This page is read-only and never signs or sends anything.

Privacy

Participants are blinded on-chain. The smart contract never records your Telegram ID or wallet address alongside your position. Instead, the contract sees an opaque reference derived as keccak256(secret ‖ marketId ‖ userId) — a one-way hash that lets the system route your payout without exposing who you are on-chain.

Odds are fully public — the Yes/No split, the pool size, the participant count — but names are never on-chain. The on-chain participant reference is a blinded hash, not your Telegram ID or wallet address.

Residual transparency: USDC Transfer logs on Base publicly record token movements between addresses, so if your funding wallet is linked to your identity off-chain that link exists on-chain too. The blinding protects you from enumeration by market — not from chain-level tracing of your own wallet activity.

Frequently asked questions

  • What is micromarkets?

    micromarkets is a Telegram-native prediction market system. A sandboxed agent drafts market terms from a chat claim, then deterministic Elixir objects validate, collect both sides, deploy, resolve, settle, or refund. The website is a read-only companion.

  • How do I create a market?

    Add the micromarkets agent to any Telegram group or DM at @micromarketsbot. Make a claim — any concrete statement people would participate in — and the agent drafts a structured market with resolution criteria and a closing date. The group taps Create, the market card goes live, and participants can join from anywhere the card is shared.

  • What can I make a market about?

    Anything that fits the supported market kinds and can be resolved from public evidence. Today that means end-date markets with fixed URLs or allowed domains, and next-tweet markets handled through the Sorsa/X plus evidence-proxy gateway flow.

  • Is my money safe? How does settlement work?

    Deposits go directly to a claim-bound escrow address on Base — not to a wallet this app controls. If both sides don't reach the $1 minimum per side, deposits are refunded and no market is deployed. When both sides fund, the market goes live on-chain. At resolution time, deterministic resolver shards and the configured GenLayer gateway return YES, NO, or UNDETERMINED; the coordinator settles on-chain or refunds everyone. Live GenLayer/X credentials and public evidence-proxy hosting are still operational launch work.

  • What does it cost?

    The minimum stake is $1 USDC per side. The default market fee is 2%. In the current contract stack, fees split across protocol treasury, group treasury when configured, and graduation-liquidity rewards; refunds are not charged. There is no fee to create a market, browse, or watch.

  • Is my participation anonymous?

    Your Telegram ID and wallet address are never recorded on-chain. The contract sees only a blinded reference — keccak256(secret ‖ marketId ‖ userId) — so participation can't be enumerated by identity. Odds (the Yes/No split and pool sizes) are public, but who chose what is not. Note: USDC Transfer logs on Base still record token movements between wallet addresses, so chain-level tracing of your own wallet activity is possible if your wallet is linked to your identity elsewhere.

Markets start in any Telegram group or DM. Add the agent, say something you'd stake on, and the bot handles the rest.

Add the agent to your chat ↗ Works in groups, topics, and 1:1 DMs. No account, no sign-up — just USDC on Base and a Telegram handle.