unionlabs/union · error
not implemented
Error message
not implemented
What it means
The Sui light client implements membership verification but leaves verify_non_membership as unimplemented!(). Any non-membership (proof-of-absence) message against a Sui union client traps with "not implemented" and reverts; the Sui client state (latest checkpoint) is untouched.
Source
Thrown at cosmwasm/lightclient/sui/src/client.rs:68
key.into(),
value.into(),
storage_proof.object,
storage_proof.transaction_effects,
storage_proof.checkpoint_contents,
consensus_state.content_digest,
)
.map_err(Into::<Error>::into)?;
Ok(())
}
fn verify_non_membership(
_ctx: IbcClientCtx<Self>,
_height: u64,
_key: Vec<u8>,
_storage_proof: Self::StateProof,
) -> Result<(), IbcClientError<Self>> {
unimplemented!()
}
fn get_timestamp(consensus_state: &Self::ConsensusState) -> Timestamp {
Timestamp::from_nanos(consensus_state.timestamp)
}
fn get_latest_height(client_state: &Self::ClientState) -> u64 {
let ClientState::V1(client_state) = client_state;
client_state.latest_checkpoint
}
fn get_counterparty_chain_id(client_state: &Self::ClientState) -> String {
let ClientState::V1(cs) = client_state;
cs.chain_id.clone()
}
fn status(_ctx: IbcClientCtx<Self>, client_state: &Self::ClientState) -> Status {
let ClientState::V1(cs) = client_state;View on GitHub (pinned to 031785bb6d)
Solutions
- Skip non-membership proof flows for Sui clients in the relayer
- Upgrade the deployed Sui light-client wasm when the method is implemented
- If implementing in a fork, model absence via Sui state proofs appropriate to the checkpoint data model
- Confirm the deployed contract version supports the message types your relayer emits
Defensive patterns
Strategy: validation
Validate before calling
const NO_NON_MEMBERSHIP = new Set(["movement", "state-lens-ics23-smt", "sui"])
if (msg.kind === "nonMembership" && NO_NON_MEMBERSHIP.has(clientType)) {
throw new Error(`${clientType} does not implement verify_non_membership`)
} Type guard
const supportsNonMembership = (clientType: string) => !new Set(["movement", "state-lens-ics23-smt", "sui"]).has(clientType)
Prevention
- Do not assume absence proofs work uniformly across union client types
- Maintain per-client capability checks in relayer message builders
- Upgrade the deployed Sui client wasm when support lands
- Cover capability gates in relayer integration tests
When it happens
Trigger: A relayer submits a proof that a key is absent in Sui state — e.g., absence proofs used when proving a channel or object does not exist — to a union light client of the Sui type.
Common situations: Uniform relayer configs applied to all client types including Sui; ported flows from EVM/Comet clients where absence proofs are routine.
Related errors
AI-assisted analysis of unionlabs/union@031785bb6d (2026-08-16).
Data as JSON: /api/errors/8a9e8b476523d7aa.
Report an issue: GitHub.