Overview
EscrowPeriod is a dual-purpose contract, it functions as both a hook and a condition:- As a hook: Records the
block.timestampat payment authorization - As a condition: Returns
trueonly after the escrow period has elapsed
AUTHORIZE_POST_ACTION_HOOK and CAPTURE_PRE_ACTION_CONDITION slots on the operator.
Type: Per-deployment via EscrowPeriodFactory
Architecture
EscrowPeriod extends AuthorizationTimeRecorderHook and addsICondition implementation. You don’t need to deploy AuthorizationTimeRecorderHook on its own, use EscrowPeriod directly.
Logic
- The payment has a recorded authorization timestamp
- Current time >= authorization time + escrow period
Deployment
Deploy via EscrowPeriodFactory:Composition with Freeze
Compose this condition with a separate Freeze condition via AndCondition to gate capture on both escrow elapsed and not frozen. See Composition Patterns for the wiring.Use Cases
- Time-lock releases: 7-day escrow for e-commerce
- Delayed fund access: Grace period before receiver can access funds
- Buyer protection: Give payers time to freeze or request refunds
Gas
Cost: ~20k gas perrun() call (one SSTORE for the timestamp). The check() call is a view function with one SLOAD.
Next Steps
Freeze
Add freeze protection to escrow periods.
Factories
Deploy EscrowPeriod via factory.
