nautechsystems/nautilus_trader · error

Proxy target has no unique deployment manifest identity

Error message

Proxy target has no unique deployment manifest identity

What it means

After validating each proxy's fields, the verifier re-scans manifest.contracts for an entry whose address equals the proxy's target_address. This error means no manifest contract entry matches the proxy target, so the proxy's implementation has no pinned identity (address + role + runtime code hash) inside the manifest.

Source

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

            Bytes::from_str(&probe.call_data)
                .map_err(|_| anyhow::anyhow!("Manifest probe call data is invalid"))?;
            Bytes::from_str(&probe.expected_output)
                .map_err(|_| anyhow::anyhow!("Manifest probe output is invalid"))?;
        }
    }

    for contract in &manifest.contracts {
        let Some(proxy) = &contract.proxy else {
            continue;
        };
        let target =
            Address::from_str(&proxy.target_address).expect("validated proxy target address");
        let target_contract = manifest
            .contracts
            .iter()
            .find(|candidate| Address::from_str(&candidate.address).ok() == Some(target))
            .ok_or_else(|| {
                anyhow::anyhow!("Proxy target has no unique deployment manifest identity")
            })?;
        anyhow::ensure!(
            target_contract.role == BlockchainContractRole::Implementation
                && target_contract
                    .runtime_code_hash
                    .eq_ignore_ascii_case(&proxy.target_code_hash),
            "Proxy target role or code hash conflicts with its deployment identity"
        );
    }

    for required in [
        BlockchainContractRole::Router,
        BlockchainContractRole::Factory,
        BlockchainContractRole::WrappedNative,
        BlockchainContractRole::Quote,
        BlockchainContractRole::Token,
        BlockchainContractRole::Pool,
    ] {

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Add a manifest contract entry for the proxy target address with its correct role and runtime_code_hash
  2. Update proxy.target_address to an implementation that is already pinned in the manifest
  3. Regenerate the full manifest after the upgrade so the new implementation is included and the manifest digest is recomputed

Example fix

// before
"contracts": [ {"address": "0xproxy...", "proxy": {"target_address": "0xmissing..."}} ]
// after
"contracts": [ {"address": "0xproxy...", "proxy": {"target_address": "0ximpl..."}}, {"address": "0ximpl...", "role": "implementation", "runtime_code_hash": "0x..."} ]
Defensive patterns

Strategy: validation

Validate before calling

fn proxy_targets_pinned(manifest: &Manifest) -> bool {
    manifest.contracts.iter().filter_map(|c| c.proxy.as_ref()).all(|p| {
        let target = Address::from_str(&p.target_address).expect("valid target");
        manifest.contracts.iter().any(|c| Address::from_str(&c.address).ok() == Some(target))
    })
}

Try / catch

match validate_manifest(&config) {
    Err(e) if e.to_string().contains("no unique deployment manifest identity") => {
        eprintln!("add a contract entry for the proxy target address: {e}");
    }
    Err(e) => return Err(e),
    Ok(v) => v,
}

Prevention

When it happens

Trigger: Manifest verification where contract A has a proxy whose target_address is not listed among the addresses of manifest.contracts — e.g. the implementation contract was omitted from the manifest, or its address was mistyped/changed after an upgrade.

Common situations: Deploying a new implementation and upgrading the proxy without regenerating the manifest; the implementation living outside the verified contract set; lowercase-vs-checksummed or mistyped hex preventing the address match.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


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