unionlabs/union · error · anyhow::Error

no ucs03 deployment for {chain_id}

Error message

no ucs03 deployment for {chain_id}

What it means

Thrown by the `u zkgm predict-proxy-account-address` command when the built-in DEPLOYMENTS registry has an entry for the requested chain, but that entry is a Deployment::IbcSolidity whose `contracts` list contains no contract named `protocols/ucs03`. The prediction needs the deployed UCS03 zkgm contract address (to derive the EVM proxy account via CREATE2), so it aborts with `.context()` when the lookup fails.

Source

Thrown at tools/u/src/zkgm/predict_proxy_account_address.rs:104

            )?;

            let deployment = &DEPLOYMENTS[&chain_id];

            if ibc_interface.is_some() {
                bail!("--ibc-interface can only be used with `custom`");
            }

            if zkgm_address.is_some() {
                bail!("--zkgm-address can only be used with `custom`");
            }

            match deployment {
                Deployment::IbcSolidity { contracts, .. } => predict_proxy_account_evm(
                    contracts
                        .iter()
                        .find(|(_, deployment)| deployment.name == "protocols/ucs03")
                        .as_ref()
                        .context(anyhow!("no ucs03 deployment for {chain_id}"))?
                        .0
                        .to_string(),
                    args,
                ),
                Deployment::IbcCosmwasm { contracts, .. } => predict_proxy_account_cosmwasm(
                    contracts
                        .iter()
                        .find(|(_, deployment)| deployment.name == "protocols/ucs03")
                        .as_ref()
                        .context(anyhow!("no ucs03 deployment for {chain_id}"))?
                        .0
                        .to_string(),
                    args,
                ),
                _ => todo!(),
            }
        }
    }

View on GitHub (pinned to 031785bb6d)

Solutions

  1. Run in custom mode instead: `u zkgm predict-proxy-account-address custom --zkgm-address <ucs03-zkgm evm address> ...` with the address taken from a block explorer
  2. Verify the chain id is spelled exactly as recorded in the deployments data (ucs04 universal chain id)
  3. Update the repo / deployments JSON so the chain's IbcSolidity contracts include a `protocols/ucs03` entry
  4. Confirm on an explorer that a protocols/ucs03 contract actually exists on that chain; if not, there is nothing to predict

Example fix

# before
u zkgm predict-proxy-account-address union-devnet-8 ... 
# after
u zkgm predict-proxy-account-address custom --zkgm-address 0x1234...abcd --ibc-interface ibc-solidity ...
Defensive patterns

Strategy: validation

Validate before calling

// before invoking the registry-backed path, confirm the ucs03 contract is recorded
fn has_ucs03(deployment: &Deployment) -> bool {
    let contracts = match deployment {
        Deployment::IbcSolidity { contracts, .. } => contracts,
        Deployment::IbcCosmwasm { contracts, .. } => contracts,
        _ => return false,
    };
    contracts.iter().any(|(_, d)| d.name == "protocols/ucs03")
}

let chain_id: UniversalChainId = arg.parse()?;
if !has_ucs03(&DEPLOYMENTS[&chain_id]) {
    // fall back to `custom --zkgm-address <addr>` instead of running and failing
}

Prevention

When it happens

Trigger: Invoking `predict-proxy-account-address <chain-id> ...` with a chain id that parses as a ucs04 universal chain id and indexes DEPLOYMENTS successfully, but whose IbcSolidity contracts vec has no entry with `name == "protocols/ucs03"`. The chain resolves, the specific zkgm contract does not.

Common situations: Stale vendored deployment artifacts (old revision of the repo, pre-zkgm release); a newly added chain whose deployment metadata is incomplete; a devnet/testnet where only cometbls (ucs02) contracts were deployed; running an older `u` binary against newer chain expectations.

Related errors


AI-assisted analysis of unionlabs/union@031785bb6d (2026-08-16). Data as JSON: /api/errors/ed0f738ef166c45c. Report an issue: GitHub.