Chio/Docs

EconomyMarkets & Discoverynew

The Open Market

A buyer submits a bid, a seller returns an ask, and both parties sign an accepted trade.

Three related crates

Earlier documentation grouped these crates together. They enforce different parts of the market flow.

CrateRoleWhat it does
chio-listingDiscoverySigned registry publication and pricing hints. Answers “what exists, and roughly what does it cost.”
chio-open-marketBid/ask venue (this page)Buyer submits a bid, seller quotes an ask, both sides accept into a receipted trade. Answers “what price clears, right now.”
chio-marketLiability and insuranceCoverage quotes, binding, and claims for economic risk. It does not authorize capability access.

See Capability Discovery for the registry chio-open-market reads listings from, and Liability & Insurance Market for the coverage market it is sometimes confused with by name alone.


The Bid, Ask, and Accept Flow

A trade starts when a buyer submits a BidRequest naming the listing it wants, a ceiling price, and a time window. The venue resolves the request against the listing and its pricing hint and returns a signed AskResponse (SignedAskResponse): a quoted price plus a token offer, a capability grant minted and bound to the buyer's subject key. The grant itself is assembled inside a BidMintContext, which pairs the resolved listing with the issuer's signing key and the buyer's subject before anything is minted.

Accepting the ask is a separate, signed step. The buyer signs an AcceptedBid (SignedAcceptedBid) against the ask and a reservation: a funds hold verified before acceptance is allowed to proceed. The accepted record carries a bid_receipt_id tying the trade back to that reservation, so a settlement layer downstream can verify the bid, ask, and acceptance as one signed record.

The shapes involved, illustrative only and simplified for space:

illustrative-bid-ask.json
{
  "bidRequest": {
    "schema": "chio.marketplace.bid-request.v1",
    "agentId": "agent-vela-7",
    "listingId": "listing-summarize-9c2f",
    "maxPricePerCall": { "units": 500, "currency": "USD" },
    "windowSeconds": 3600,
    "issuedAt": 1745870400
  },
  "askResponse": {
    "schema": "chio.marketplace.ask-response.v1",
    "listingId": "listing-summarize-9c2f",
    "agentId": "agent-vela-7",
    "bidDigest": "8f2c1a...",
    "quotedPrice": { "units": 480, "currency": "USD" },
    "tokenOffer": { "id": "tok-2e91...", "...": "..." },
    "issuedAt": 1745870401,
    "expiresAt": 1745870701
  }
}

The field names match the implementation. The values are examples, not captured production data.


Trust and Abuse Controls

The fee schedule, defined in fee_schedule.rs, sets what publishing, disputing, and participating in the market cost, and what bond an operator posts as collateral before it can act. A bond can be held, slashed, or restored through the penalty process.

Misbehavior is processed in penalty.rs. An OpenMarketPenaltyArtifact carries one of three dispositions against a posted bond: HoldBond, SlashBond, or ReverseSlash, the last of which restores a slash later found to be incorrect. The current implementation recognizes four abuse classes: SpamPublication, FraudulentListing, ReplayPublication, and UnverifiableListingBehavior. A dispute itself carries its own bond class, OpenMarketBondClass::Dispute, so contesting a penalty also requires a bond.

The venue cannot slash a bond by itself. Slashing requires an enforcedSanction case in chio-governance, the same case kind and the same enforced state that blocks admission elsewhere in the registry. See Governance Charters for how a case reaches enforced, and what blocks_admission actually means.


Fail-Closed Admissibility

Before the venue mints a grant, it checks the bid, listing, and pricing hint independently. A valid signature does not make a stale listing admissible, and a fresh listing does not make an invalid signature valid.

  • Signature validity: the bid, the resolved listing, and its pricing hint each verify independently.
  • Listing status: the listing must be active; suspended, revoked, retired, or superseded listings are refused.
  • Freshness: a listing whose freshness window has elapsed is treated as stale and refused, the same as it would be dropped from a discovery search.
  • Pricing-expiry: a pricing hint past its own expiry is refused even when the listing itself is otherwise healthy.

A failed check denies the bid. The venue supplies no fallback price.


Binding bids to grants

The crate implements the fee schedule, penalty process, and governance check. The remaining limitation begins after acceptance.

Current grant limitation

A grant minted from a bid currently has no output constraint. The bid does not bind the purchase to a specific output. That binding uses Constraint::OutputDigestSha256, a proposed Cognition Market field described in the Cognition Market that ties a grant to an agreed output digest ahead of settlement. This page does not claim that output binding is available in the current bid flow. See its reveal and settlement path for the settlement flow that applies this constraint.

Next Steps