check if client is frozen/expired before allowing a Msg to be submitted
The relayer should generally be checking if a client is frozen/expired before users can submit Msgs on those channels
Issue:
To determine a client state's status (e.g. Active, Frozen, or Expired) you either have to utilize the ClientState interface's provided function Status(ctx sdk.Context, clientStore sdk.KVStore, cdc codec.BinaryCodec) Status or use type assertions to access the concrete type where you then have access to the client state's frozen height and IsExpired method.
I don't see any way possible to utilize the ClientState interface's Status function since it is tightly coupled with the Cosmos SDK.
We also want to keep the locations where we need to use type assertions to a minimum since this creates more overhead for integrating new IBC light client types in the future. Additionally, I don't know if type assertions would even work in this case because we would need to know the most recent block time for the chain associated with a particular light client, but the ChainProcessor only knows about the block time for the chain it is associated with and not the block time for every counterparty chain. There is a BlockTime function in the Provider interface, but I don't see a clear path to accessing the counterparty chains Provider implementation from the ChainProcessor.
I could be overlooking something obvious here as I'm still getting acclimated to the new architecture but it seems like we may possibly want to expose the pathends inside the ChainProcessor so that we can access the counterparty chain's ChainProvider
I think this is not an issue anymore but it would be nice to dig into this and verify that the correct behavior is in place. @AntiTyping this may be another issue you may like to look into eventually. It would be nice to ensure we have proper testing in place too to ensure it works as intended.