{"record":{"id":"ed0f738ef166c45c","repo":"unionlabs/union","slug":"no-ucs03-deployment-for-chain-id","errorCode":null,"errorMessage":"no ucs03 deployment for {chain_id}","messagePattern":"no ucs03 deployment for (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"tools/u/src/zkgm/predict_proxy_account_address.rs","lineNumber":104,"sourceCode":"            )?;\n\n            let deployment = &DEPLOYMENTS[&chain_id];\n\n            if ibc_interface.is_some() {\n                bail!(\"--ibc-interface can only be used with `custom`\");\n            }\n\n            if zkgm_address.is_some() {\n                bail!(\"--zkgm-address can only be used with `custom`\");\n            }\n\n            match deployment {\n                Deployment::IbcSolidity { contracts, .. } => predict_proxy_account_evm(\n                    contracts\n                        .iter()\n                        .find(|(_, deployment)| deployment.name == \"protocols/ucs03\")\n                        .as_ref()\n                        .context(anyhow!(\"no ucs03 deployment for {chain_id}\"))?\n                        .0\n                        .to_string(),\n                    args,\n                ),\n                Deployment::IbcCosmwasm { contracts, .. } => predict_proxy_account_cosmwasm(\n                    contracts\n                        .iter()\n                        .find(|(_, deployment)| deployment.name == \"protocols/ucs03\")\n                        .as_ref()\n                        .context(anyhow!(\"no ucs03 deployment for {chain_id}\"))?\n                        .0\n                        .to_string(),\n                    args,\n                ),\n                _ => todo!(),\n            }\n        }\n    }","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/unionlabs/union/blob/031785bb6dc6b957c624e62bc64c184409c97d7b/tools/u/src/zkgm/predict_proxy_account_address.rs#L86-L122","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"# before\nu zkgm predict-proxy-account-address union-devnet-8 ... \n# after\nu zkgm predict-proxy-account-address custom --zkgm-address 0x1234...abcd --ibc-interface ibc-solidity ...","handlingStrategy":"validation","validationCode":"// before invoking the registry-backed path, confirm the ucs03 contract is recorded\nfn has_ucs03(deployment: &Deployment) -> bool {\n    let contracts = match deployment {\n        Deployment::IbcSolidity { contracts, .. } => contracts,\n        Deployment::IbcCosmwasm { contracts, .. } => contracts,\n        _ => return false,\n    };\n    contracts.iter().any(|(_, d)| d.name == \"protocols/ucs03\")\n}\n\nlet chain_id: UniversalChainId = arg.parse()?;\nif !has_ucs03(&DEPLOYMENTS[&chain_id]) {\n    // fall back to `custom --zkgm-address <addr>` instead of running and failing\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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"],"tags":["rust","union","deployment","cli","config"],"backgroundTag":null,"analyzedSha":"031785bb6dc6b957c624e62bc64c184409c97d7b","analyzedAt":"2026-08-16T06:24:09.996Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}