Skip to main content

Venue Smoke Test

CLI tooling for verifying exchange-adapter connectivity and validating the full movement lifecycle with a small stablecoin transfer. Use it after setting up a new exchange, or after changing credentials or withdrawal allowlists, to confirm the live path still works.

Prerequisites

  • QTG is installed and the qtg CLI is available.
  • API credentials for the target exchange are configured in environment variables (MG_*).
  • PostgreSQL is running for smoke tests (MG_DATABASE_URL).

Probe — read-only health check

Runs five read-only checks against an exchange adapter. It does not require a DB connection and does not move funds.

Checks

Examples

Output

The command prints JSON:

Exit Code

Special behavior

  • If the adapter does not support a method (NotImplementedError), that probe is marked skipped and does not affect the overall result.
  • Probes run sequentially. If one fails, the remaining probes still run.

Smoke — small live transfer

Runs the full movement lifecycle for an actual stablecoin transfer from the source exchange to the destination exchange.

Safety controls

These limits are hard-coded and cannot be changed through environment variables.

Flow

Examples

Output

Exit Code

Dashboard integration

Smoke movements appear in the dashboard like regular movements. The strategy_id uses the smoke-{source}-{dest}-{timestamp} format, so it can be filtered in the dashboard.

Template

Smoke tests use the smoke.cex_roundtrip template. The first run creates it automatically; later runs reuse the existing template. Template shape (2-node DAG):
There is no deposit_observe node. The smoke test verifies the withdrawal path; deposit confirmation depends on the destination exchange’s internal processing.

Troubleshooting

exit 2: unsupported exchange adapter

Check whether credential environment variables are set for the venue:
Also check whether MG_CEX_BINDINGS_JSON includes the exchange binding.

Probe passes but smoke fails

  • DB connection: smoke tests require PostgreSQL. Confirm MG_DATABASE_URL is correct.
  • Whitelist: confirm the destination exchange deposit address is registered in the source exchange withdrawal whitelist.
  • Travel rule: transfers involving Korean exchanges may require travel-rule information.
  • Network mismatch: confirm --network refers to the same network on both exchanges. Exchange network names can differ, such as ethereum vs ETH or tron vs TRX.

Movement ends in TIMEOUT

The default timeout is 300 seconds, or 5 minutes. Increase --timeout during network congestion. CEX withdrawals can take several minutes to tens of minutes depending on exchange-side processing time.