Skip to main content

What conditions do

Conditions are swappable contracts that control who can perform actions on a PaymentOperator. Each operator has 5 condition slots, one per action: These are the condition half of the operator’s 10 slots. For the full slot layout alongside the post-action hooks, see PaymentOperator: 10-slot configuration.

ICondition Interface

Parameters:
  • paymentInfo, The payment information struct
  • amount, The amount involved in the action (0 for authorization-only checks like refund request status updates)
  • caller, The address attempting the action
  • data, Arbitrary data forwarded from the caller (signatures, proofs, attestations)
Return: true if the caller can proceed, false otherwise.

Default Behavior

Condition slot = address(0): always returns true (allow). The action has no restrictions. You only need to set conditions for slots you want to restrict. Leave the rest as address(0).

Singleton vs Per-Deployment

Security Rules

Conditions MUST NOT revert. Return false to deny, never revert. The operator converts false into a ConditionNotMet error.
  • Conditions should be view or pure to prevent reentrancy attacks
  • Never make external state-changing calls inside a condition
  • Cover edge cases in tests. Bugs in authorization logic can lock funds

Configuration Patterns

Conditions compose to create flexible authorization policies. Here are common patterns:

Open Authorization, Restricted Capture

Payer-Only Actions

Arbiter-Controlled

For complete configuration examples, see the Examples page.

Gas Optimization

Singleton Reuse

All operators reuse the same singleton conditions. Reference the existing addresses, don’t deploy new instances:

Stateless Conditions

Prefer stateless conditions when possible:

Next Steps

Hooks

Learn about the state recording system.

Combinators

Compose conditions with And/Or/Not logic.

Custom Conditions

Build your own condition contracts.

Examples

See complete configuration examples.