diff --git a/proto/interchain_security/ccv/provider/v1/query.proto b/proto/interchain_security/ccv/provider/v1/query.proto index 9b00989f6d..c58833e0e1 100644 --- a/proto/interchain_security/ccv/provider/v1/query.proto +++ b/proto/interchain_security/ccv/provider/v1/query.proto @@ -125,7 +125,7 @@ service Query { QueryValidatorConsumerCommissionRateRequest) returns (QueryValidatorConsumerCommissionRateResponse) { option (google.api.http).get = - "/interchain_security/ccv/provider/consumer_commission_rate"; + "/interchain_security/ccv/provider/consumer_commission_rate/{chain_id}/{provider_address}"; } // QueryOldestUnconfirmedVsc returns the send timestamp of the oldest unconfirmed VSCPacket for a given chainID diff --git a/tests/integration/distribution.go b/tests/integration/distribution.go index d3111a39a5..5d62b2ee35 100644 --- a/tests/integration/distribution.go +++ b/tests/integration/distribution.go @@ -989,12 +989,13 @@ func (s *CCVTestSuite) TestAllocateTokensToValidator() { // set the same consumer commission rate for all consumer validators for _, v := range consuVals { provAddr := providertypes.NewProviderConsAddress(sdk.ConsAddress(v.ProviderConsAddr)) - providerKeeper.SetConsumerCommissionRate( + err := providerKeeper.SetConsumerCommissionRate( ctx, chainID, provAddr, tc.rate, ) + s.Require().NoError(err) } // allocate tokens diff --git a/x/ccv/provider/keeper/distribution.go b/x/ccv/provider/keeper/distribution.go index 2bf0ba2a24..84f4efcc19 100644 --- a/x/ccv/provider/keeper/distribution.go +++ b/x/ccv/provider/keeper/distribution.go @@ -280,12 +280,10 @@ func (k Keeper) HandleSetConsumerCommissionRate(ctx sdk.Context, chainID string, "unknown consumer chain, with id: %s", chainID) } // set per-consumer chain commission rate for the validator address - k.SetConsumerCommissionRate( + return k.SetConsumerCommissionRate( ctx, chainID, providerAddr, commissionRate, ) - - return nil } diff --git a/x/ccv/provider/keeper/keeper.go b/x/ccv/provider/keeper/keeper.go index e3ad29beeb..ff720d6d37 100644 --- a/x/ccv/provider/keeper/keeper.go +++ b/x/ccv/provider/keeper/keeper.go @@ -1240,14 +1240,17 @@ func (k Keeper) SetConsumerCommissionRate( chainID string, providerAddr types.ProviderConsAddress, commissionRate sdk.Dec, -) { +) error { store := ctx.KVStore(k.storeKey) bz, err := commissionRate.Marshal() if err != nil { - panic(fmt.Errorf("consumer commission rate marshalling failed: %s", err)) + err = fmt.Errorf("consumer commission rate marshalling failed: %s", err) + k.Logger(ctx).Error(err.Error()) + return err } store.Set(types.ConsumerCommissionRateKey(chainID, providerAddr), bz) + return nil } // GetConsumerCommissionRate returns the per-consumer commission rate set @@ -1264,8 +1267,10 @@ func (k Keeper) GetConsumerCommissionRate( } cr := sdk.Dec{} + // handle error gracefully since it's called in BeginBlockRD if err := cr.Unmarshal(bz); err != nil { - panic(fmt.Sprintf("consumer commission rate unmarshalling failed: %s", err)) + k.Logger(ctx).Error("consumer commission rate unmarshalling failed: %s", err) + return sdk.ZeroDec(), false } return cr, true diff --git a/x/ccv/provider/types/codec.go b/x/ccv/provider/types/codec.go index 5f45c43fdf..cc842276fb 100644 --- a/x/ccv/provider/types/codec.go +++ b/x/ccv/provider/types/codec.go @@ -58,6 +58,10 @@ func RegisterInterfaces(registry codectypes.InterfaceRegistry) { (*exported.ClientMessage)(nil), &tendermint.Misbehaviour{}, ) + registry.RegisterImplementations( + (*sdk.Msg)(nil), + &MsgSetConsumerCommissionRate{}, + ) msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) }