{"record":{"id":"765d337f9d8981af","repo":"nautechsystems/nautilus_trader","slug":"verification-chain-anchor-name-does-not-match-the","errorCode":null,"errorMessage":"Verification chain anchor name does not match the configured chain","messagePattern":"Verification chain anchor name does not match the configured chain","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"critical","filePath":"crates/adapters/blockchain/src/execution/client.rs","lineNumber":190,"sourceCode":"        let transaction_limits = Self::transaction_limits(&config)?;\n        let chain = Arc::new(config.chain.clone());\n        let cache = BlockchainCache::new(chain.clone());\n        let http_rpc_client = Arc::new(BlockchainHttpRpcClient::new(\n            config.http_rpc_url.clone().into_inner(),\n            config.rpc_requests_per_second,\n            None,\n        ));\n        let verification_config = config.verification.as_ref().ok_or_else(|| {\n            anyhow::anyhow!(\"Independent Blockchain execution verification is required\")\n        })?;\n        anyhow::ensure!(\n            verification_config.chain_anchor.chain_id == config.chain.chain_id,\n            \"Verification chain anchor ID does not match the configured chain\"\n        );\n        anyhow::ensure!(\n            verification_config.chain_anchor.chain_name == config.chain.name.to_string(),\n            \"Verification chain anchor name does not match the configured chain\"\n        );\n        let verification = VerificationCoordinator::new(\n            http_rpc_client.clone(),\n            config.http_rpc_url.expose_secret(),\n            verification_config,\n            config.rpc_requests_per_second,\n        )?;\n        let wallet_address = validate_address(config.wallet_address.as_str())?;\n        let erc20_contract = Erc20Contract::new_with_timeout(\n            http_rpc_client.clone(),\n            Some(EXECUTION_RPC_TIMEOUT_SECS),\n            true,\n        );\n\n        let router_addresses = config\n            .router_addresses\n            .iter()\n            .map(|address| validate_address(address.as_str()))\n            .collect::<anyhow::Result<Vec<_>>>()?;","sourceCodeStart":172,"sourceCodeEnd":208,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/blockchain/src/execution/client.rs#L172-L208","documentation":"Thrown by `BlockchainExecutionClient::new` via `anyhow::ensure!` when `verification.chain_anchor.chain_name` differs from `config.chain.name`. Along with the chain ID check, this guarantees the verification coordinator anchors to the same named network the client is configured for.","triggerScenarios":"Constructing a `BlockchainExecutionClient` where `verification.chain_anchor.chain_name` (string) does not equal `config.chain.name.to_string()` — e.g. anchor says \"mainnet\" while chain name is \"ethereum\", or an edited/mismatched config section.","commonSituations":"Using a verification config produced for another deployment; inconsistent naming conventions between teams/config generators; typos or case differences in the chain name.","solutions":["Set `verification.chain_anchor.chain_name` to exactly `config.chain.name.to_string()` (match case and spelling).","Derive the verification config from the same `chain` object instead of a separate hand-written file.","If the name was changed upstream, regenerate or update the verification anchor to the new name."],"exampleFix":"// before\nchain_anchor: ChainAnchor { chain_id: 8453, chain_name: \"base-mainnet\".into() }, // chain.name = \"base\"\n// after\nchain_anchor: ChainAnchor { chain_id: config.chain.chain_id, chain_name: config.chain.name.to_string() },","handlingStrategy":"validation","validationCode":"fn chain_names_match(config: &BlockchainExecutionClientConfig) -> bool {\n    config.verification.as_ref()\n        .map(|v| v.chain_anchor.chain_name == config.chain.name.to_string())\n        .unwrap_or(false)\n}","typeGuard":null,"tryCatchPattern":"BlockchainExecutionClient::new(config.clone()).map_err(|e| {\n    if e.to_string().contains(\"chain anchor name\") {\n        anyhow::anyhow!(\"verification.chain_anchor.chain_name must equal chain.name ({})\", config.chain.name)\n    } else { e }\n})?;","preventionTips":["Generate the verification anchor from config.chain.name programmatically","Standardize chain naming conventions across config generators","Check for typos/case differences when hand-editing chain names"],"tags":["blockchain","config","chain-name","validation"],"backgroundTag":"invalid-config-value","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"}