nautechsystems/nautilus_trader · error

Deployment manifest contains a duplicate contract address

Error message

Deployment manifest contains a duplicate contract address

What it means

Deployment manifest verification found the same contract address listed more than once; each deployed contract must be unique, so the duplicate breaks the manifest's integrity guarantee and verification aborts.

Source

Thrown at crates/adapters/blockchain/src/rpc/verification.rs:1266

        "Deployment manifest chain identity does not match the chain anchor"
    );
    let canonical_manifest = serde_json::to_vec(manifest)
        .map_err(|_| anyhow::anyhow!("Failed to serialize the deployment manifest"))?;
    anyhow::ensure!(
        keccak256(canonical_manifest) == manifest_digest,
        "Deployment manifest digest does not match its canonical content"
    );
    anyhow::ensure!(
        !manifest.contracts.is_empty() && !manifest.tokens.is_empty() && !manifest.pools.is_empty(),
        "Deployment manifest contracts, tokens, and pools are required"
    );
    let mut contract_addresses = HashSet::new();
    let mut roles = HashSet::new();

    for contract in &manifest.contracts {
        let address = Address::from_str(&contract.address)
            .map_err(|_| anyhow::anyhow!("Deployment manifest contains an invalid address"))?;
        anyhow::ensure!(
            contract_addresses.insert(address),
            "Deployment manifest contains a duplicate contract address"
        );
        roles.insert(contract.role);
        let code_hash = B256::from_str(&contract.runtime_code_hash)
            .map_err(|_| anyhow::anyhow!("Deployment manifest contains an invalid code hash"))?;
        anyhow::ensure!(
            code_hash != B256::ZERO,
            "Manifest code hashes must be nonzero"
        );
        anyhow::ensure!(
            matches!(contract.role, BlockchainContractRole::Implementation)
                || !contract.probes.is_empty(),
            "Every deployed contract role requires at least one identity probe"
        );

        if let Some(proxy) = &contract.proxy {
            anyhow::ensure!(

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Deduplicate the contract entries in the manifest
  2. Regenerate the manifest without duplicate contracts
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/adapters/blockchain/src/rpc/verification.rs:1266 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08). Data as JSON: /api/errors/b17931480046b3ec. Report an issue: GitHub.