What Are Conditions?
Conditions are pluggable contracts that control who can perform actions on a PaymentOperator. Each operator has 5 condition slots — one per action:| Slot | Controls |
|---|---|
AUTHORIZE_CONDITION | Who can authorize payments |
CHARGE_CONDITION | Who can charge partial amounts |
RELEASE_CONDITION | Who can release from escrow |
REFUND_IN_ESCROW_CONDITION | Who can refund during escrow |
REFUND_POST_ESCROW_CONDITION | Who can refund after release |
ICondition Interface
paymentInfo— The payment information structamount— The amount involved in the action (0 for authorization-only checks like refund request status updates)caller— The address attempting the action
true if the caller is authorized, false otherwise.
Default Behavior
Condition slot =address(0) — always returns true (allow). The action is unrestricted.
This means you only need to set conditions for slots you want to restrict. Leave the rest as address(0).
Singleton vs Per-Deployment
| Type | Examples | Deploy Strategy |
|---|---|---|
| Singleton | PayerCondition, ReceiverCondition, AlwaysTrueCondition | Deployed once, reuse everywhere |
| Per-deployment | StaticAddressCondition, EscrowPeriod, Freeze | Deploy per use case via factories |
| Composable | And/Or/Not | Combine existing conditions via factories |
Security Rules
- Conditions should be
vieworpureto prevent reentrancy attacks - Never make external state-changing calls inside a condition
- Test thoroughly — edge cases in authorization logic can lead to locked funds
Configuration Patterns
Conditions compose to create flexible authorization policies. Here are common patterns:Open Authorization, Restricted Release
Payer-Only Actions
Arbiter-Controlled
Gas Optimization
Singleton Reuse
Singleton conditions are deployed once and reused by all operators. Reference the existing addresses — don’t deploy new instances:Stateless Conditions
Prefer stateless conditions when possible:Next Steps
Recorders
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.
