01 · Conditions

Anything Arc can read can release money.

A condition is a predicate over on-chain state. onus accepts four families at launch. Each has a witness that supplies the state, a window in which it must hold, and a payout rule. If a condition needs a human to interpret it, it is not a condition.

The four families.

C1 · delivery

Something arrived.

Release when a named party attests delivery on Arc against a reference the onus carries (order id, tracking id, document hash). Attestations use EAS schemas; the carrier, warehouse or recipient is the attester.

condition: attest(by: 0xCarrier, schema: delivery/v1, ref: "PO-4127")
payout:    full amount to payee
lapse:     if no attestation by T
C2 · oracle

A number crossed a line.

Release when a named feed reports a value satisfying a comparison, optionally sustained for a window. Feeds are named by address at write time; both parties agree to the source before locking.

condition: feed(0xSPY).close >= 640.00 for 1 session
payout:    full amount, or scaled by (value − strike)
lapse:     if not met by T
C3 · result

Work was done.

Release when a checker contract verifies a submitted result against the spec hash in the onus. Checkers can run tests, compare hashes, call another model, or require a second agent's countersignature.

condition: check(0xChecker, spec: 0xabc…, result) == true
payout:    full, or per milestone
lapse:     if no passing result by T
C4 · time

Nothing went wrong.

Release after a period unless a named party files a dispute on-chain. Disputes freeze the onus until a named resolver — which can itself be a checker — decides. Default for deposits, retainers and warranties.

condition: now >= T0 + 30d and no dispute(by: payer)
payout:    full amount to payee
dispute:   route to 0xResolver

Composing conditions.

Conditions combine with and, or and then. A supplier contract might read: delivery attested and 7 days without dispute. A milestone contract: result A passes then result B passes, with a separate amount at each step.

Partial release is explicit: the onus lists tranches and which condition unlocks each. There is no "release 60% and we'll see".

Rule: every branch of a condition must end in either release or lapse. An onus with a path that ends nowhere is rejected at write time.

What is not a condition.

proposedproblemuse instead
"when the client is satisfied"not readableC3 with a spec + checker, or C4 with a dispute window
"when the invoice is paid off-chain"not on ArcC1 with the payee attesting receipt, or move the payment on-chain
"when the market looks good"not a predicateC2 with a named feed and a number
"when onus support approves"we hold no discretionname a resolver you both trust as the witness