Skip to main content

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