{"record":{"id":"e7401e0e6cbb5dbe","repo":"nautechsystems/nautilus_trader","slug":"retained-execution-intent-belongs-to-another-signe","errorCode":null,"errorMessage":"Retained execution intent belongs to another signer","messagePattern":"Retained execution intent belongs to another signer","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/adapters/blockchain/src/execution/client.rs","lineNumber":5336,"sourceCode":"        let active_count = snapshot\n            .intents\n            .iter()\n            .filter(|intent| intent.active)\n            .count();\n        anyhow::ensure!(\n            active_count <= 1,\n            \"Retained execution history has multiple active signer owners\"\n        );\n\n        let mut nonce_owners = HashMap::new();\n        let mut records = Vec::with_capacity(snapshot.intents.len());\n        let finalized_headers = finalized_headers\n            .iter()\n            .map(durable_verified_header)\n            .collect::<Vec<_>>();\n\n        for intent in &snapshot.intents {\n            anyhow::ensure!(\n                intent.chain_id == self.chain.chain_id\n                    && intent.wallet_address == self.config.wallet_address,\n                \"Retained execution intent belongs to another signer\"\n            );\n            let purpose = TransactionPurpose::parse(&intent.purpose).ok_or_else(|| {\n                anyhow::anyhow!(\"Retained execution intent has an unsupported purpose\")\n            })?;\n            let hashes = hashes_by_intent\n                .get(&intent.id)\n                .map(Vec::as_slice)\n                .unwrap_or_default();\n            let current = hashes\n                .iter()\n                .copied()\n                .filter(|hash| hash.current)\n                .collect::<Vec<_>>();\n            anyhow::ensure!(\n                current.len() <= 1,","sourceCodeStart":5318,"sourceCodeEnd":5354,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/blockchain/src/execution/client.rs#L5318-L5354","documentation":"Each retained execution intent is validated against the current client's chain ID and configured wallet address before its history is replayed. This error is thrown when the snapshot was created for a different chain or a different wallet, meaning the stored intents do not belong to this signer and cannot be safely resumed.","triggerScenarios":"Starting the execution client with a snapshot whose intent.chain_id != self.chain.chain_id or intent.wallet_address != self.config.wallet_address.","commonSituations":"Pointing the client at a new RPC chain/chain ID while reusing an old data directory; changing WALLET_ADDRESS in config without clearing retained state; copying state files between deployments (testnet snapshot used on mainnet).","solutions":["Move or delete the stale execution snapshot so the client rebuilds state for the current chain/wallet (after confirming no pending on-chain transactions)","Fix the config so chain_id and wallet_address match the deployment that produced the snapshot","Keep per-chain, per-wallet data directories so snapshots are never reused across deployments"],"exampleFix":"// before\nwallet_address = \"0xOLD\"\n# reuses old snapshot dir\n// after\nwallet_address = \"0xNEW\"\nmv data/execution data/execution.old-0xOLD  # fresh snapshot for new signer","handlingStrategy":"validation","validationCode":"fn snapshot_matches(snapshot: &ExecutionSnapshot, chain_id: u64, wallet: Address) -> bool {\n    snapshot.intents.iter().all(|i| i.chain_id == chain_id && i.wallet_address == wallet)\n}","typeGuard":null,"tryCatchPattern":"match client.start_with_snapshot(snapshot) {\n    Err(e) if e.to_string().contains(\"belongs to another signer\") => { /* archive snapshot, confirm no pending tx, rebuild */ }\n    other => other?,\n}","preventionTips":["Scope durable state directories per (chain_id, wallet_address)","Diff config chain/wallet against snapshot metadata at startup before loading","Never copy execution state between testnet and mainnet deployments"],"tags":["state-mismatch","signer","chain-id","recovery","config"],"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-14T05:17:10.506Z"}