The Pause page is the operator safety console. It has three distinct controls:
- Pause Vault — onchain contract-level pause / unpause.
- Pause Keepers — offchain per-vault service controls.
- Emergency Exit — per-yield-source liquidity drain through the Strategy Engine and OMS.
Use the narrowest control that solves the problem. A vault pause, keeper pause, and emergency exit have different blast radii.
Pause Vault
Vault pause is an onchain control. It halts protocol-level vault operations until a manager signs an unpause transaction.
GET /api/v1/vaults/pause-status?vaults={chainId}:{vaultAddr}
POST /api/v1/vaults/emergency-pause/prepare
POST /api/v1/vaults/emergency-unpause/prepare
Pause reasons are recorded for auditability.
Pause Keepers
Keeper service controls are offchain. Use them when you want to stop a worker without changing vault contract state.
GET /api/v1/vaults/{chain_id}/{vault}/services
PUT /api/v1/vaults/{chain_id}/{vault}/services/{service_name}/pause
PUT /api/v1/vaults/{chain_id}/{vault}/services/{service_name}/resume
PUT /api/v1/vaults/{chain_id}/{vault}/services/enabled
Service pause is useful for maintenance, data issues, or temporary operator intervention.
Emergency Exit
Emergency Exit drains liquidity from one whitelisted yield source. It is operator-armed, target-scoped, and designed for urgent source-level risk events.
When armed for a source:
- The paired
EMERGENCY_EXIT strategy transitions to RUNNING.
- The Strategy Engine records an emergency lock keyed by that source’s
target_address.
- User-defined strategies targeting the same address are blocked from publishing intents.
- Strategies targeting other yield sources continue normally unless they have their own lock.
- The emergency strategy emits withdrawal intents on every tick until stopped.
- In-flight OMS transactions continue to settle even after the operator stops the drain.
Emergency Exit is not a replacement for vault pause. If the entire vault is unsafe, pause the vault. If one source is unsafe and the vault can keep operating elsewhere, arm an exit for that source.
Prerequisites
Emergency Exit depends on:
- The yield source being whitelisted.
- An active withdrawal hook for that source in the current merkle config.
- Published / available strategy proofs for the active merkle tree.
- A paired
EMERGENCY_EXIT strategy, created automatically when prerequisites are available.
- OMS/session-key readiness for execution.
If the Pause page cannot arm a source, check Merkle Trees, Yield Source Management, and Strategy Canvas.
Arm an Emergency Exit
- Open Pause → Emergency Exit.
- Select the yield source.
- Review current allocation, APY/TVL metadata, and blocked strategies.
- Enter the confirmation suffix for the yield source address.
- Optionally enter a reason.
- Choose max slippage. Default is 50 bps.
- Click Arm emergency exit.
The reason is stored with the emergency arm request and shown while the lock is active.
If manager permission is revoked while arming, the in-flight request is not automatically cancelled. Verify the Pause page and stop the drain if it succeeded under the prior policy.
Stop an Emergency Exit
Stopping transitions the paired strategy back to IDLE and releases the emergency lock. User-defined strategies targeting that source are eligible again on the next tick.
PATCH /api/v1/strategies/{strategy_id}/state
{
"target_state": "IDLE",
"version": 12
}
Stopping does not cancel transactions already published to the OMS.
Strategy Canvas Locking
While an emergency lock is active:
- The Strategy Canvas shows a banner for active drains.
- Strategy toggles that target the locked source are disabled.
- Reorder controls are disabled only for lanes containing affected strategies.
- Emergency strategies are hidden from normal strategy editing by default and are read-only when shown.
The engine exposes locks through shard and vault state as emergency_locks entries with strategy_id, target_address, started_at, and optional reason.
Yield-Source Whitelist Side Effects
Emergency Exit is tied to yield-source whitelist state.
| Action | Side Effect |
|---|
| Whitelist add | Provisions a paired EMERGENCY_EXIT withdrawal strategy for that target when prerequisites are available. |
| Whitelist remove | Archives the paired emergency strategy when no lock is active. |
| Remove while locked | Blocked until the drain is stopped and the lock clears. |
Failure States
| State | Meaning |
|---|
| No withdrawal hook or proof | Active merkle tree does not authorize the drain. Configure hooks and publish proofs. |
EMERGENCY_LOCK_ACTIVE | Another emergency drain already holds the target lock. |
| Duplicate target | A paired emergency strategy already exists for that vault / target. |
| Read-only banner | Current operator can inspect but cannot arm or stop drains. |
| Lock data unavailable | UI fails closed and blocks controls until lock state loads. |
Control Comparison
| Control | Scope | Onchain Tx? | Typical Use |
|---|
| Pause Vault | Entire vault contract | Yes | Protocol-level emergency |
| Pause Keepers | One or all offchain services | No | Maintenance or worker incident |
| Emergency Exit | One yield source target | Strategy/OMS execution | Drain a risky source |
API Reference
| Endpoint | Method | Description |
|---|
/api/v1/vaults/pause-status | GET | Batch onchain pause status |
/api/v1/vaults/emergency-pause/prepare | POST | Prepare pause transaction |
/api/v1/vaults/emergency-unpause/prepare | POST | Prepare unpause transaction |
/api/v1/vaults/{chain_id}/{vault}/services | GET | List keeper services |
/api/v1/vaults/{chain_id}/{vault}/services/{name}/pause | PUT | Pause one service |
/api/v1/vaults/{chain_id}/{vault}/services/{name}/resume | PUT | Resume one service |
/api/v1/vaults/{chain_id}/{vault}/services/enabled | PUT | Bulk enable / disable services |
/api/v1/strategies?kind=EMERGENCY_EXIT | GET | List paired emergency strategies |
/api/v1/strategies/{id}/state | PATCH | Arm or stop paired emergency strategy |
/api/v1/engine/shards/{vault_id}/state | GET | Read active emergency locks and allocations |