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
- 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
- Verify the chain id is spelled exactly as recorded in the deployments data (ucs04 universal chain id)
- Update the repo / deployments JSON so the chain's IbcSolidity contracts include a `protocols/ucs03` entry
- 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
- Keep the deployments artifacts in sync with the chains you target (re-pull after zkgm releases)
- Prefer the `custom` + `--zkgm-address` flow in scripts so results depend on an explicit address, not registry contents
- When adding a chain id to automation, verify it exists in the deployments data with a protocols/ucs03 entry first
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
- no ucs03 deployment for {chain_id}
- wasm-packet_send event not found
- config file must be specified
- plugin not found
- no database set in config, queue commands require the `pg-qu
AI-assisted analysis of unionlabs/union@031785bb6d (2026-08-16).
Data as JSON: /api/errors/ed0f738ef166c45c.
Report an issue: GitHub.