You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Modify IsFrozen to become a Status function and block any packet processing if the status of the IBC client is not active.
Problem Definition
Core IBC does not account for specific light client notions. It blocks packet processing if the client is frozen but does not check if a tendermint is expired. This can lead to users accidentally sending packets via expired clients if their user interface doesn't make an explicit check before hand. If the counterparty client is expired as well then any tokens sent are effectively lost.
Proposal
Change IsFrozen to return a Status of the client. If the Status != exported.Active, then no packet processing should occur. Alternatively, we could modify IsFrozen to be IsActive
In order for 07-tendermint to determine if a client is expired, it must have access to the latest consensus state. In most situations this can be generalized to all light clients. It is possible a light client might need access to its own client store in order to use metadata set in that store to determine the status of the client. Either signature should be fine, but in order to get the latest consensus state, we need access to the client store so maybe it is best to supply the client store in the function signature.
The benefit of using Status() as opposed to IsActive() is trivial support for a Status gRPC route. If the client state interface only supported IsActive then we would likely need to add a Status gRPC route for every light client as opposed to defining it once in 02-client.
For Admin Use
Not duplicate issue
Appropriate labels applied
Appropriate contributors tagged/assigned
The text was updated successfully, but these errors were encountered:
Summary
Modify
IsFrozen
to become aStatus
function and block any packet processing if the status of the IBC client is not active.Problem Definition
Core IBC does not account for specific light client notions. It blocks packet processing if the client is frozen but does not check if a tendermint is expired. This can lead to users accidentally sending packets via expired clients if their user interface doesn't make an explicit check before hand. If the counterparty client is expired as well then any tokens sent are effectively lost.
Proposal
Change
IsFrozen
to return aStatus
of the client. If theStatus
!= exported.Active, then no packet processing should occur. Alternatively, we could modifyIsFrozen
to beIsActive
In order for 07-tendermint to determine if a client is expired, it must have access to the latest consensus state. In most situations this can be generalized to all light clients. It is possible a light client might need access to its own client store in order to use metadata set in that store to determine the status of the client. Either signature should be fine, but in order to get the latest consensus state, we need access to the client store so maybe it is best to supply the client store in the function signature.
The benefit of using
Status()
as opposed toIsActive()
is trivial support for a Status gRPC route. If the client state interface only supportedIsActive
then we would likely need to add aStatus
gRPC route for every light client as opposed to defining it once in 02-client.For Admin Use
The text was updated successfully, but these errors were encountered: