Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Offer lifecycle · Boson Protocol
Skip to content

Offer lifecycle

Offers are simpler than exchanges. They have effectively four reachable states:

What each state means

  • ACTIVE — buyers can still commit. The default.
  • VOIDED — seller has retracted the offer. No new commits accepted. Existing exchanges continue independently.
  • EXPIREDvalidUntilDate has passed.
  • SOLD_OUTquantityAvailable has decremented to zero through commits.

These states are derived, not stored. The subgraph and SDK compute them from voided (bool on-chain), validUntilDate, and quantityAvailable.

Voiding non-listed offers

For non-listed (private / EIP-712) offers — those that exist as a signed FullOffer but haven't been written on-chain — voiding goes through void_non_listed_offer (or _batch) on the MCP, or the equivalent SDK method. The on-chain side records the offer hash as voided so it can't subsequently be committed to.

Common footguns

  • Voiding does not refund seller deposit. Deposits are per-exchange, not per-offer; nothing is locked at creation. Any deposited, but not yet encumbered funds can be freely witdrawn.
  • An offer can EXPIRE while exchanges from it are still live. The two state machines are independent.
  • SOLD_OUT is observed, not declared. If you need precise inventory, read quantityAvailable from the contract, not the subgraph, to avoid lag.

Next