Skip to content

Commit

Permalink
Docu RecoverClient, add label, re-use error.
Browse files Browse the repository at this point in the history
  • Loading branch information
DimitrisJim committed Aug 30, 2023
1 parent 9ce8187 commit a6a4265
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 4 deletions.
10 changes: 9 additions & 1 deletion modules/core/02-client/keeper/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,13 @@ func (k Keeper) UpgradeClient(ctx sdk.Context, clientID string, upgradedClient e
return nil
}

// RecoverClient will retrieve the subject and substitute client.
// A callback will occur to the subject client state with the client
// prefixed store being provided for both the subject and the substitute client.
// The IBC client implementations are responsible for validating the parameters of the
// substitute (ensuring they match the subject's parameters) as well as copying
// the necessary consensus states from the substitute to the subject client
// store. The substitute must be Active and the subject must not be Active.
func (k Keeper) RecoverClient(ctx sdk.Context, subjectClientID, substituteClientID string) error {
subjectClientState, found := k.GetClientState(ctx, subjectClientID)
if !found {
Expand Down Expand Up @@ -184,11 +191,12 @@ func (k Keeper) RecoverClient(ctx sdk.Context, subjectClientID, substituteClient
k.Logger(ctx).Info("client recovered", "client-id", subjectClientID)

defer telemetry.IncrCounterWithLabels(
[]string{"ibc", "client", "recover"},
[]string{"ibc", "client", "update"},
1,
[]metrics.Label{
telemetry.NewLabel(types.LabelClientType, substituteClientState.ClientType()),
telemetry.NewLabel(types.LabelClientID, subjectClientID),
telemetry.NewLabel(types.LabelUpdateType, "recovery"),
},
)

Expand Down
2 changes: 1 addition & 1 deletion modules/core/02-client/keeper/proposal.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func (k Keeper) ClientUpdateProposal(ctx sdk.Context, p *types.ClientUpdatePropo
subjectClientStore := k.ClientStore(ctx, p.SubjectClientId)

if status := k.GetClientStatus(ctx, subjectClientState, p.SubjectClientId); status == exported.Active {
return errorsmod.Wrap(types.ErrInvalidUpdateClientProposal, "cannot update Active subject client")
return errorsmod.Wrap(types.ErrInvalidRecoveryClient, "cannot update Active subject client")
}

substituteClientState, found := k.GetClientState(ctx, p.SubstituteClientId)
Expand Down
3 changes: 1 addition & 2 deletions modules/core/02-client/types/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,12 @@ var (
ErrFailedNextSeqRecvVerification = errorsmod.Register(SubModuleName, 21, "next sequence receive verification failed")
ErrSelfConsensusStateNotFound = errorsmod.Register(SubModuleName, 22, "self consensus state not found")
ErrUpdateClientFailed = errorsmod.Register(SubModuleName, 23, "unable to update light client")
ErrInvalidUpdateClientProposal = errorsmod.Register(SubModuleName, 24, "invalid update client proposal")
ErrInvalidRecoveryClient = errorsmod.Register(SubModuleName, 24, "invalid recovery client")
ErrInvalidUpgradeClient = errorsmod.Register(SubModuleName, 25, "invalid client upgrade")
ErrInvalidHeight = errorsmod.Register(SubModuleName, 26, "invalid height")
ErrInvalidSubstitute = errorsmod.Register(SubModuleName, 27, "invalid client state substitute")
ErrInvalidUpgradeProposal = errorsmod.Register(SubModuleName, 28, "invalid upgrade proposal")
ErrClientNotActive = errorsmod.Register(SubModuleName, 29, "client state is not active")
ErrFailedMembershipVerification = errorsmod.Register(SubModuleName, 30, "membership verification failed")
ErrFailedNonMembershipVerification = errorsmod.Register(SubModuleName, 31, "non-membership verification failed")
ErrInvalidRecoveryClient = errorsmod.Register(SubModuleName, 32, "invalid recovery client")
)

0 comments on commit a6a4265

Please sign in to comment.