Debugging Programmatic Orders
Use this decision tree when your programmatic order isn’t executing as expected.
Why didn’t my order execute?
Step 1: Check the transaction
Verify the ComposableCoW.create() transaction was confirmed:
- Check the tx hash on Etherscan/block explorer
- Look for the
ConditionalOrderCreated event in the logs
- If the tx reverted, check the revert reason (usually setup issues — see Troubleshooting)
Step 2: Check watch-tower indexing
The watch-tower monitors on-chain events and posts discrete orders to the orderbook.
Is the public watch-tower monitoring your chain?
Supported: Ethereum, Gnosis Chain, Arbitrum One, Base, Polygon, Avalanche, BNB Chain, Linea, Plasma, Ink, Sepolia
Check via the watch-tower API:
If you’re running your own watch-tower:
Look for your Safe address in the output. If it’s not there, the watch-tower hasn’t seen the ConditionalOrderCreated event yet.
Run a one-shot check:
This will show exactly what the watch-tower sees for your Safe and what orders it would post.
Step 3: Check getTradeableOrder()
The watch-tower calls your handler’s getTradeableOrder() function each polling cycle. If it reverts, no order is posted.
Test it manually:
Common revert reasons:
Step 4: Check order status
Once the watch-tower posts an order, query its status:
Step 5: Check solver competition
If the order is open but not filling:
Solvers may skip your order if:
- Insufficient balance at settlement time
- Insufficient allowance for VaultRelayer
- Unprofitable — the trade doesn’t generate enough surplus to cover gas
- Illiquid pair — no good routing available
Common patterns
TWAP order only partially executing
TWAP orders execute in parts over time. Each part has its own time window. If a part doesn’t execute:
- The time window may be too short for solvers to find it
- The part amount may be too small to be profitable
- The Safe may not have enough balance for the remaining parts
Order works on mainnet but not testnet
Sepolia has limited solver participation. See the testing guide for testnet-specific advice.
Order executes once but not again
For recurring orders (like TWAP), the watch-tower must post new discrete orders for each part. Check:
- Is the watch-tower still running?
- Has the programmatic order been cancelled on-chain?
- Has the Safe’s balance been depleted?
Last modified on March 17, 2026