nautechsystems/nautilus_trader · error
Venue execution reports are not supported on the blockchain
Error message
Venue execution reports are not supported on the blockchain execution client
What it means
The ExecutionClient trait's generate_order_status_report asks a venue to report a single order's state. The blockchain execution client has no such venue API: on-chain state is read directly and recovery is done by durable intent reconciliation at connect(), so the method unconditionally bails with VENUE_EXECUTION_REPORTS_UNSUPPORTED (defined at client.rs:102).
Source
Thrown at crates/adapters/blockchain/src/execution/client.rs:2832
self.chain.name
);
Ok(())
}
async fn disconnect(&mut self) -> anyhow::Result<()> {
// Task handles stay registered so a later `connect` can prove their termination
// before releasing any stale pre-signature slot claim
self.pending_tasks.abort_all_retained();
self.signer = None;
self.core.set_disconnected();
Ok(())
}
async fn generate_order_status_report(
&self,
_cmd: &GenerateOrderStatusReport,
) -> anyhow::Result<Option<OrderStatusReport>> {
anyhow::bail!("{VENUE_EXECUTION_REPORTS_UNSUPPORTED}");
}
async fn generate_order_status_reports(
&self,
_cmd: &GenerateOrderStatusReports,
) -> anyhow::Result<Vec<OrderStatusReport>> {
anyhow::bail!("{VENUE_EXECUTION_REPORTS_UNSUPPORTED}");
}
async fn generate_fill_reports(
&self,
_cmd: GenerateFillReports,
) -> anyhow::Result<Vec<FillReport>> {
anyhow::bail!("{VENUE_EXECUTION_REPORTS_UNSUPPORTED}");
}
async fn generate_position_status_reports(
&self,View on GitHub (pinned to d1527c24af)
Solutions
- Do not request venue order status reports from the blockchain client; rely on its connect-time reconciliation of unresolved execution intents
- Read on-chain/durable state instead: query the client's transaction cache or the chain directly for the order's intent and receipt
- If writing generic multi-venue code, feature-gate report generation so it is skipped for blockchain-backed clients
Example fix
// before: assumes every client supports venue reports
if let Some(report) = client.generate_order_status_report(&cmd).await? { ... }
// after: skip report-driven recovery for blockchain clients
match client.client_type() {
ClientType::Blockchain => { /* rely on connect() reconciliation */ }
_ => { if let Some(report) = client.generate_order_status_report(&cmd).await? { ... } }
} Defensive patterns
Strategy: try-catch
Try / catch
// Treat as an unsupported-operation marker, not a runtime fault
match client.generate_order_status_report(cmd).await {
Err(e) if e.to_string().contains("not supported") => {
log::debug!("venue reports unsupported for blockchain client; relying on connect reconciliation");
Ok(None)
}
other => other,
} Prevention
- Gate report calls on the execution client type in generic wiring
- Prefer the client's durable transaction cache for blockchain order state
- Cover this in integration tests so refactors do not start calling it unconditionally
When it happens
Trigger: Invoking generate_order_status_report on a BlockchainExecutionClient, directly or through LiveNode/generic reconciliation code that calls the trait method for every execution venue.
Common situations: Generic node wiring or tooling ported from a CEX adapter that polls order status; user code calling mass-report helpers that fan out to per-order status queries; framework routines that assume venue reconciliation is available on all clients.
Related errors
- HyperSync parsing of pool created event is not defined in th
- HyperSync parsing of swap event is not defined in this dex:
- HyperSync parsing of mint event is not defined in this dex:
- Unsupported order type {}; only Market is supported
- Quote-denominated quantities are not supported; quantity mus
AI-assisted analysis of nautechsystems/nautilus_trader@d1527c24af (2026-08-21).
Data as JSON: /api/errors/55359bea1941e371.
Report an issue: GitHub.