Locate the return leg of an IBC acknowledgement backlog

A relayer can deliver a packet successfully yet leave its acknowledgement unprocessed on the original chain. Check the sender using sequences whose acknowledgements already exist on the receiver.

Query the original sending end

Set SRC to the sending chain’s TLS gRPC endpoint with reflection. Use the source-side channel and feed it known acknowledgement sequences from the receiving chain.

grpcurl -d '{"portId":"transfer","channelId":"channel-7","packetAckSequences":["21","22","23"]}' "$SRC" ibc.core.channel.v1.Query/UnreceivedAcks

If the response contains 22, the original chain reports that acknowledgement as unreceived at the queried height. Inspect the destination acknowledgement for 22 and the relayer path carrying proof back to the source.

Distinguish processing from application success

An acknowledgement may carry an application error. Delivering that acknowledgement closes the protocol step and can trigger application-specific recovery. To explain the user outcome, decode the application acknowledgement bytes or consult its events. github.com ibc-go Query API