{"record":{"id":"258bf64ca42ecadf","repo":"nautechsystems/nautilus_trader","slug":"transactionmanager-not-initialized-call-connect","errorCode":null,"errorMessage":"TransactionManager not initialized - call connect() first","messagePattern":"TransactionManager not initialized - call connect\\(\\) first","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/dydx/src/execution/mod.rs","lineNumber":832,"sourceCode":"        if instrument.is_none() {\n            self.instrument_cache.log_missing_clob_pair_id(clob_pair_id);\n        }\n\n        instrument\n    }\n\n    fn get_execution_components(\n        &self,\n    ) -> anyhow::Result<(\n        Arc<TransactionManager>,\n        Arc<TxBroadcaster>,\n        Arc<OrderMessageBuilder>,\n    )> {\n        let tx_manager = self\n            .tx_manager\n            .as_ref()\n            .ok_or_else(|| {\n                anyhow::anyhow!(\"TransactionManager not initialized - call connect() first\")\n            })?\n            .clone();\n        let broadcaster = self\n            .broadcaster\n            .as_ref()\n            .ok_or_else(|| anyhow::anyhow!(\"TxBroadcaster not initialized - call connect() first\"))?\n            .clone();\n        let order_builder = self\n            .order_builder\n            .as_ref()\n            .ok_or_else(|| {\n                anyhow::anyhow!(\"OrderMessageBuilder not initialized - call connect() first\")\n            })?\n            .clone();\n        Ok((tx_manager, broadcaster, order_builder))\n    }\n\n    fn spawn_task<F>(&self, label: &'static str, fut: F)","sourceCodeStart":814,"sourceCodeEnd":850,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/dydx/src/execution/mod.rs#L814-L850","documentation":"The dYdX execution client keeps its TransactionManager (on-chain transaction construction/signing state) in an Option that is populated during connect(). get_execution_components() unwraps it with ok_or_else, so any order/cancel operation invoked before connect() completes (or after it failed to set the manager) throws this error. It is a lifecycle/state error, not a network error.","triggerScenarios":"Calling submit_order, submit_order_list, cancel_order, cancel_all_orders, or batch_cancel_orders on a DydxExecClient whose connect() was never called, is still in progress, or failed before tx_manager was assigned.","commonSituations":"Submitting orders immediately after client construction without awaiting connection; connect() failed earlier (network/RPC error) leaving the Option as None; using the client before the node/gRPC endpoint is reachable; a reconnect dropped and never re-established the manager.","solutions":["Ensure connect() is called and completes successfully before submitting or canceling orders","Check logs/return value of connect() for earlier failures (RPC endpoint unreachable) that left the manager uninitialized","Re-create or reconnect the execution client if the client entered a disconnected state"],"exampleFix":"// before\nlet client = DydxExecClient::new(config)?;\nclient.submit_order(order)?; // tx_manager still None\n// after\nlet client = DydxExecClient::new(config)?;\nclient.connect().await?;\nclient.submit_order(order)?;","handlingStrategy":"try-catch","validationCode":"// guard before trading calls\nif !client.is_connected() {\n    client.connect().await?;\n}","typeGuard":null,"tryCatchPattern":"match client.submit_order(order).await {\n    Err(e) if e.to_string().contains(\"TransactionManager not initialized\") => {\n        client.connect().await?; // re-initialize, then retry once\n        client.submit_order(order).await?;\n    }\n    r => r?,\n}","preventionTips":["Always await connect() (checking its Result) before any submit/cancel call","Sequence trading logic to start only after a connected/ready event or callback","Log and inspect connect() failures; do not ignore its error"],"tags":["rust","lifecycle","dydx","not-initialized"],"backgroundTag":"invalid-state-transition","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}