{"record":{"id":"ce058d4200689ad8","repo":"nautechsystems/nautilus_trader","slug":"independent-blockchain-execution-verification-is-r","errorCode":null,"errorMessage":"Independent Blockchain execution verification is required","messagePattern":"Independent Blockchain execution verification is required","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"crates/adapters/blockchain/src/execution/client.rs","lineNumber":181,"sourceCode":"    ///\n    /// Returns an error if transaction limits are missing or invalid, independent verification is\n    /// missing or conflicts with the configured chain, the deployment manifest or provider\n    /// topology is invalid, a configured address or token pair is invalid, the router allowlist is\n    /// empty, or the slippage bounds are inconsistent or not below 100%.\n    pub fn new(\n        core_client: ExecutionClientCore,\n        config: BlockchainExecutionClientConfig,\n    ) -> anyhow::Result<Self> {\n        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(),","sourceCodeStart":163,"sourceCodeEnd":199,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/blockchain/src/execution/client.rs#L163-L199","documentation":"Thrown by `BlockchainExecutionClient::new` when the provided `BlockchainExecutionClientConfig` has no `verification` section. Independent blockchain execution verification (a verification coordinator with a chain anchor and deployment manifest) is mandatory, so construction fails rather than running unverified.","triggerScenarios":"Constructing a `BlockchainExecutionClient` with a config whose `verification` field is `None` — e.g. loading config from TOML/JSON that omits the `[verification]` table, or programmatically building the config without setting it.","commonSituations":"Copying an old config file from before verification became required; a config template with the verification section commented out; deserialization silently defaulting verification to None.","solutions":["Add a `verification` section to the config with `chain_anchor` (chain_id, chain_name) and `deployment_manifest`.","Set `config.verification = Some(VerificationConfig {...})` when constructing the config in code.","Check the config file for a missing or commented-out `[verification]` block.","Verify the config deserialization path actually populates `verification` (field names/serde renames)."],"exampleFix":"// before\nlet config = BlockchainExecutionClientConfig { chain, http_rpc_url, rpc_requests_per_second, verification: None };\n// after\nlet config = BlockchainExecutionClientConfig {\n    chain,\n    http_rpc_url,\n    rpc_requests_per_second,\n    verification: Some(VerificationConfig {\n        chain_anchor: ChainAnchor { chain_id: chain.chain_id, chain_name: chain.name.to_string() },\n        deployment_manifest: load_deployment_manifest()?,\n    }),\n};","handlingStrategy":"validation","validationCode":"// validate before constructing the client\nif config.verification.is_none() {\n    return Err(anyhow!(\"config.verification must be provided (chain_anchor + deployment_manifest)\"));\n}","typeGuard":"fn verification_configured(config: &BlockchainExecutionClientConfig) -> bool {\n    config.verification.as_ref().map(|v| !v.deployment_manifest.contracts.is_empty()).unwrap_or(false)\n}","tryCatchPattern":"let client = BlockchainExecutionClient::new(config).map_err(|e| {\n    if e.to_string().contains(\"verification is required\") {\n        anyhow::anyhow!(\"Config error: add a [verification] section with chain_anchor and deployment_manifest\")\n    } else { e }\n})?;","preventionTips":["Never omit the [verification] section in deployment configs","Validate the full config with a schema check before client construction","Keep config templates up to date when verification becomes mandatory"],"tags":["blockchain","config","validation","startup"],"backgroundTag":"missing-required-config-field","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"}