Funding modes

One object graph, three settlement layers. A budget is always the same thing — a funded ceiling fanned out into capped, revocable streams — but the ceiling can be funded three ways:

ModeThe ceiling isSettlement isMoney at risk
Control (none)A ledger recordLedger entriesNone — no money exists anywhere
Escrow (usdc)An on-chain deposit in the vault contractOn-chain, per-voucher, against escrowThe deposited amount, held by contract rules
Card (card)ONE manual-capture authorization (card authorization-backed budgets)PSP captures + split transfers per voucher totalsThe authorized amount, held by the card network

The mode is a tag on openBudget (or one environment variable in the quickstarts); streams, vouchers, session keys, credentials, revocation, and reconciliation are byte-for-byte the same code.

What is invariant across modes

the engine and (in escrow mode) by the contract itself.

a provider's claim. Crash and recover: the ledger re-derives from signed artifacts.

units — never billed, on any rail.

settlement layer's own records, to the unit — a mismatch is a loud failure, never a rounding note.

floating point never touches an amount, a rate, or a fee.

Choosing a mode

Start with Control — it is the full protocol minus money and it costs nothing to be wrong. Move to escrow when your counterparties settle on-chain; move to card when buyers fund with cards. Both money rails run sandbox-first (testnet, card sandbox); parity with production surfaces is a versioned promise (R9).