Skip to main content
The resolution channel sends every settlement event: when a condition resolves, a result is reported, or resolution is paused. They come from the CTF base layer, the NegRisk adapter, and the BinaryModule and NegRiskModule contracts. We decode each one and send it after the transaction is confirmed on-chain.
These events used to be split across the old lifecycle and combos channels. They now stream here as one settlement feed. Market setup events (not settlement) stay on lifecycle.

Subscribe

{
  "action": "subscribe",
  "id": "s1",
  "channel": "resolution"
}
With no filters, you get every confirmed resolution event from all markets.

Filters

FilterTypeRequiredDescription
market_idsstring[]NoCondition IDs as bytes32 hex strings. Keeps events for those markets.
This channel accepts only market_ids. wallets, token_ids, and min_usd are ignored here. See Filters for the combination rule.

Events

This channel sends all eight settlement events. See Onchain Data for the part each event plays in the resolution lifecycle.
Eventdata.typeDescription
ConditionResolutioncondition_resolutionThe final payout numerators saved for a CTF condition. Sets how a resolved condition splits collateral.
ConditionResolvedcondition_resolvedA condition resolved inside the module system. Carries the condition id and result numerators.
OutcomeReportedoutcome_reportedA reported neg-risk outcome. Gives resolution context for a question in a neg-risk market.
ResultReportedresult_reportedA result reported to a module. Carries the resolver address, condition id, and result numerators.
ResolutionPausedresolution_pausedResolution paused for a module id. Means market resolution is blocked for now.
ResolutionUnpausedresolution_unpausedResolution unpaused for a module id. Means market resolution can run again.
ResolverPausedresolver_pausedA resolver paused at the module level. Carries the resolver address and timestamp.
ResolverUnpausedresolver_unpausedA resolver unpaused at the module level. Carries the resolver address.

Payloads

Every frame wraps the event in the standard envelope (type, id, channel, confirmed, data) shown on Frames. Below, each block is the data object for one event — its type discriminator plus every field the ABI decodes. A full frame looks like:
{
  "type": "event",
  "id": "s1",
  "channel": "resolution",
  "confirmed": true,
  "data": {
    "type": "condition_resolution",
    "conditionId": "0x…",
    "oracle": "0x…",
    "…": "…"
  }
}
conditionId is bytes32 on the CTF base-layer events (condition_resolution) but the compact bytes31 module id on the module events (condition_resolved, result_reported). Both serialize as 0x… hex; the byte length differs.

condition_resolution

ConditionResolution on ConditionalTokens. The final payout numerators saved for a resolved CTF condition.
{
  "type": "condition_resolution",
  "conditionId": "0x…",
  "oracle": "0x…",
  "questionId": "0x…",
  "outcomeSlotCount": "0x2",
  "payoutNumerators": ["0x1", "0x0"]
}
FieldSolidity typeDescription
typestringcondition_resolution.
conditionIdbytes32 (hex)Condition being resolved.
oracleaddress (hex)Oracle that reported the outcome.
questionIdbytes32 (hex)Question id linked to this condition.
outcomeSlotCountuint256 (hex)Number of outcome slots for this condition.
payoutNumeratorsuint256[] (hex)Payout numerator per outcome slot. Sets how collateral splits.

condition_resolved

ConditionResolved on the BinaryModule / NegRiskModule. A condition resolved inside the module system.
{
  "type": "condition_resolved",
  "conditionId": "0x…",
  "result": ["0x1", "0x0"]
}
FieldSolidity typeDescription
typestringcondition_resolved.
conditionIdbytes31 (hex)Module condition id that resolved.
resultuint256[] (hex)Result numerator per outcome slot.

outcome_reported

OutcomeReported on the NegRiskAdapter. A single neg-risk question’s outcome reported.
{
  "type": "outcome_reported",
  "marketId": "0x…",
  "questionId": "0x…",
  "outcome": true
}
FieldSolidity typeDescription
typestringoutcome_reported.
marketIdbytes32 (hex)Neg-risk market the question belongs to.
questionIdbytes32 (hex)Question that was reported.
outcomeboolReported outcome (true = yes, false = no).

result_reported

ResultReported on a module. A resolver pushed a result into a module condition.
{
  "type": "result_reported",
  "resolver": "0x…",
  "conditionId": "0x…",
  "result": ["0x1", "0x0"]
}
FieldSolidity typeDescription
typestringresult_reported.
resolveraddress (hex)Resolver that reported the result.
conditionIdbytes31 (hex)Module condition id.
resultuint256[] (hex)Result numerator per outcome slot.

resolution_paused

ResolutionPaused on a module. Resolution blocked for a module id, with the pause timestamp.
{
  "type": "resolution_paused",
  "id": "0x…",
  "timestamp": "0x…"
}
FieldSolidity typeDescription
typestringresolution_paused.
idbytes31 (hex)Module id whose resolution was paused.
timestampuint256 (hex)Unix time (seconds) the pause took effect.

resolution_unpaused

ResolutionUnpaused on a module. Resolution allowed again for a module id.
{
  "type": "resolution_unpaused",
  "id": "0x…"
}
FieldSolidity typeDescription
typestringresolution_unpaused.
idbytes31 (hex)Module id whose resolution resumed.

resolver_paused

ResolverPaused on a module. A resolver paused at the module level, with the pause timestamp.
{
  "type": "resolver_paused",
  "resolver": "0x…",
  "timestamp": "0x…"
}
FieldSolidity typeDescription
typestringresolver_paused.
resolveraddress (hex)Resolver that was paused.
timestampuint256 (hex)Unix time (seconds) the pause took effect.

resolver_unpaused

ResolverUnpaused on a module. A resolver resumed at the module level.
{
  "type": "resolver_unpaused",
  "resolver": "0x…"
}
FieldSolidity typeDescription
typestringresolver_unpaused.
resolveraddress (hex)Resolver that resumed.

Pending feed

Set confirmed: false on your subscribe to get the pending feed of this channel — the same payload shape for pending transactions sent to the CTF, NegRisk adapter, and module contracts, before they are in a block. Pending events are guesses. A transaction can be dropped, replaced, or reverted. See Mempool for the full frame shape and how to handle it.
{
  "action": "subscribe",
  "id": "pending",
  "channel": "resolution",
  "confirmed": false
}
Last modified on July 5, 2026