diff --git a/x/ccv/consumer/keeper/validators.go b/x/ccv/consumer/keeper/validators.go index 4386bb7b86..8d50a96edd 100644 --- a/x/ccv/consumer/keeper/validators.go +++ b/x/ccv/consumer/keeper/validators.go @@ -84,8 +84,13 @@ func (k Keeper) IterateValidators(context.Context, func(index int64, validator s return nil } -// Validator - unimplemented on CCV keeper -func (k Keeper) Validator(ctx context.Context, addr sdk.ValAddress) (stakingtypes.ValidatorI, error) { +// Validator - unimplemented on CCV keeper but implemented on standalone keeper +func (k Keeper) Validator(sdkCtx context.Context, addr sdk.ValAddress) (stakingtypes.ValidatorI, error) { + ctx := sdk.UnwrapSDKContext(sdkCtx) + if k.IsPrevStandaloneChain(ctx) && k.ChangeoverIsComplete(ctx) && k.standaloneStakingKeeper != nil { + return k.standaloneStakingKeeper.Validator(ctx, addr) + } + panic("unimplemented on CCV keeper") } @@ -174,15 +179,23 @@ func (k Keeper) SlashWithInfractionReason(goCtx context.Context, addr sdk.ConsAd // the provider validator set will soon be in effect, and jailing is n/a. func (k Keeper) Jail(context.Context, sdk.ConsAddress) error { return nil } -// Unjail - unimplemented on CCV keeper +// Unjail is enabled for previously standalone chains after the changeover is complete. // -// This method should be a no-op even during a standalone to consumer changeover. -// Once the upgrade has happened as a part of the changeover, -// the provider validator set will soon be in effect, and jailing is n/a. -func (k Keeper) Unjail(context.Context, sdk.ConsAddress) error { return nil } +// This method should be a no-op for consumer chains that launched with the CCV module first. +func (k Keeper) Unjail(sdkCtx context.Context, addr sdk.ConsAddress) error { + ctx := sdk.UnwrapSDKContext(sdkCtx) + if k.IsPrevStandaloneChain(ctx) && k.ChangeoverIsComplete(ctx) && k.standaloneStakingKeeper != nil { + return k.standaloneStakingKeeper.Unjail(ctx, addr) + } + return nil +} -// Delegation - unimplemented on CCV keeper -func (k Keeper) Delegation(ctx context.Context, addr sdk.AccAddress, valAddr sdk.ValAddress) (stakingtypes.DelegationI, error) { +// Delegation - unimplemented on CCV keeper but implemented on standalone keeper +func (k Keeper) Delegation(sdkCtx context.Context, addr sdk.AccAddress, valAddr sdk.ValAddress) (stakingtypes.DelegationI, error) { + ctx := sdk.UnwrapSDKContext(sdkCtx) + if k.IsPrevStandaloneChain(ctx) && k.ChangeoverIsComplete(ctx) && k.standaloneStakingKeeper != nil { + return k.standaloneStakingKeeper.Delegation(ctx, addr, valAddr) + } panic("unimplemented on CCV keeper") }