In the presence of multiple relayers, it can happen that an
updateClient transaction fails if its height is smaller than the on chain client state height.
It is possible that there are two relayers scanning for different items, X vs Y, and they require consensus state (CS) updates for same client on destination chain but at different heights. This could result on one of the relayer transaction to fail, as a
clientUpdate for height h fails if the latest client height is H >=h.
Some analysis on the relayer logic, given the current ICS07 spec and module implementation, is attempted in informalsystems/ibc-rs#61
This issue is to investigate the possibility of allowing CS updates with heights smaller or equal than the current client state height, and make the required changes in ICS02 (e.g.
checkValidityAndUpdateState line 1678) and ICS07 specs, cosmos-SDK and relayer implementations.