Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: remove max throttled packets param #1332

Merged
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions proto/interchain_security/ccv/provider/v1/provider.proto
Original file line number Diff line number Diff line change
@@ -152,6 +152,10 @@ message GlobalSlashEntry {

// Params defines the parameters for CCV Provider module
message Params {

// Reserve 8th slot for deprecited max throttled packet param
reserved 8;

ibc.lightclients.tendermint.v1.ClientState template_client = 1;
// TrustingPeriodFraction is used to compute the consumer and provider IBC
// client's TrustingPeriod from the chain defined UnbondingPeriod
@@ -179,10 +183,6 @@ message Params {
// total voting power that the slash meter can hold.
string slash_meter_replenish_fraction = 7;

// The maximum amount of throttled slash or vsc matured packets
// that can be queued for a single consumer before the provider chain halts.
int64 max_throttled_packets = 8;

// The fee required to be paid to add a reward denom
cosmos.base.v1beta1.Coin consumer_reward_denom_registration_fee = 9
[ (gogoproto.nullable) = false ];
9 changes: 0 additions & 9 deletions x/ccv/provider/keeper/params.go
Original file line number Diff line number Diff line change
@@ -69,14 +69,6 @@ func (k Keeper) GetSlashMeterReplenishFraction(ctx sdk.Context) string {
return f
}

// GetMaxThrottledPackets returns the maximum amount of throttled slash or vsc matured packets
// that can be queued for a single consumer before the provider chain halts.
func (k Keeper) GetMaxThrottledPackets(ctx sdk.Context) int64 {
var p int64
k.paramSpace.Get(ctx, types.KeyMaxThrottledPackets, &p)
return p
}

func (k Keeper) GetConsumerRewardDenomRegistrationFee(ctx sdk.Context) sdk.Coin {
// Due to difficulties doing migrations in coordinated upgrades, this param is hardcoded to 10 ATOM in v1.1.0-multiden.
// The below code is the proper way to store the param. A future scheduled upgrade will
@@ -96,7 +88,6 @@ func (k Keeper) GetParams(ctx sdk.Context) types.Params {
k.GetVscTimeoutPeriod(ctx),
k.GetSlashMeterReplenishPeriod(ctx),
k.GetSlashMeterReplenishFraction(ctx),
k.GetMaxThrottledPackets(ctx),
k.GetConsumerRewardDenomRegistrationFee(ctx),
)
}
1 change: 0 additions & 1 deletion x/ccv/provider/keeper/params_test.go
Original file line number Diff line number Diff line change
@@ -44,7 +44,6 @@ func TestParams(t *testing.T) {
10*time.Minute,
time.Hour,
"0.4",
100,
sdk.Coin{
Denom: "stake",
Amount: sdk.NewInt(10000000),
1 change: 0 additions & 1 deletion x/ccv/provider/keeper/proposal_test.go
Original file line number Diff line number Diff line change
@@ -770,7 +770,6 @@ func TestMakeConsumerGenesis(t *testing.T) {
VscTimeoutPeriod: providertypes.DefaultVscTimeoutPeriod,
SlashMeterReplenishPeriod: providertypes.DefaultSlashMeterReplenishPeriod,
SlashMeterReplenishFraction: providertypes.DefaultSlashMeterReplenishFraction,
MaxThrottledPackets: providertypes.DefaultMaxThrottledPackets,
ConsumerRewardDenomRegistrationFee: sdk.Coin{
Denom: "stake",
Amount: sdk.NewInt(1000000),
53 changes: 13 additions & 40 deletions x/ccv/provider/types/genesis_test.go
Original file line number Diff line number Diff line change
@@ -81,7 +81,7 @@ func TestValidateGenesisState(t *testing.T) {
nil,
types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}),
types.DefaultTrustingPeriodFraction, time.Hour, time.Hour, 30*time.Minute, time.Hour, "0.1", 400, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
types.DefaultTrustingPeriodFraction, time.Hour, time.Hour, 30*time.Minute, time.Hour, "0.1", sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
nil,
nil,
nil,
@@ -102,7 +102,7 @@ func TestValidateGenesisState(t *testing.T) {
nil,
types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}),
types.DefaultTrustingPeriodFraction, time.Hour, time.Hour, 30*time.Minute, time.Hour, "0.1", 400, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
types.DefaultTrustingPeriodFraction, time.Hour, time.Hour, 30*time.Minute, time.Hour, "0.1", sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
nil,
nil,
nil,
@@ -123,7 +123,7 @@ func TestValidateGenesisState(t *testing.T) {
nil,
types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}),
types.DefaultTrustingPeriodFraction, time.Hour, time.Hour, 30*time.Minute, time.Hour, "0.1", 400, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
types.DefaultTrustingPeriodFraction, time.Hour, time.Hour, 30*time.Minute, time.Hour, "0.1", sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
nil,
nil,
nil,
@@ -144,7 +144,7 @@ func TestValidateGenesisState(t *testing.T) {
nil,
types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}),
types.DefaultTrustingPeriodFraction, time.Hour, time.Hour, 30*time.Minute, time.Hour, "0.1", 400, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
types.DefaultTrustingPeriodFraction, time.Hour, time.Hour, 30*time.Minute, time.Hour, "0.1", sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
nil,
nil,
nil,
@@ -171,7 +171,7 @@ func TestValidateGenesisState(t *testing.T) {
types.DefaultVscTimeoutPeriod,
types.DefaultSlashMeterReplenishPeriod,
types.DefaultSlashMeterReplenishFraction,
types.DefaultMaxThrottledPackets, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
nil,
nil,
nil,
@@ -198,7 +198,7 @@ func TestValidateGenesisState(t *testing.T) {
types.DefaultVscTimeoutPeriod,
types.DefaultSlashMeterReplenishPeriod,
types.DefaultSlashMeterReplenishFraction,
types.DefaultMaxThrottledPackets, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
nil,
nil,
nil,
@@ -225,7 +225,7 @@ func TestValidateGenesisState(t *testing.T) {
types.DefaultVscTimeoutPeriod,
types.DefaultSlashMeterReplenishPeriod,
types.DefaultSlashMeterReplenishFraction,
types.DefaultMaxThrottledPackets, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(1000000)}),
sdk.Coin{Denom: "stake", Amount: sdk.NewInt(1000000)}),
nil,
nil,
nil,
@@ -252,7 +252,7 @@ func TestValidateGenesisState(t *testing.T) {
types.DefaultVscTimeoutPeriod,
types.DefaultSlashMeterReplenishPeriod,
types.DefaultSlashMeterReplenishFraction,
types.DefaultMaxThrottledPackets, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
nil,
nil,
nil,
@@ -279,7 +279,7 @@ func TestValidateGenesisState(t *testing.T) {
0, // 0 vsc timeout here
types.DefaultSlashMeterReplenishPeriod,
types.DefaultSlashMeterReplenishFraction,
types.DefaultMaxThrottledPackets, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
nil,
nil,
nil,
@@ -306,7 +306,7 @@ func TestValidateGenesisState(t *testing.T) {
types.DefaultVscTimeoutPeriod,
0, // 0 slash meter replenish period here
types.DefaultSlashMeterReplenishFraction,
types.DefaultMaxThrottledPackets, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
nil,
nil,
nil,
@@ -333,34 +333,7 @@ func TestValidateGenesisState(t *testing.T) {
types.DefaultVscTimeoutPeriod,
types.DefaultSlashMeterReplenishPeriod,
"1.15",
types.DefaultMaxThrottledPackets, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
nil,
nil,
nil,
nil,
nil,
),
false,
},
{
"invalid params, invalid max pending slash packets",
types.NewGenesisState(
types.DefaultValsetUpdateID,
nil,
[]types.ConsumerState{{ChainId: "chainid-1", ChannelId: "channelid", ClientId: "client-id"}},
nil,
nil,
nil,
nil,
types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}),
types.DefaultTrustingPeriodFraction,
ccv.DefaultCCVTimeoutPeriod,
types.DefaultInitTimeoutPeriod,
types.DefaultVscTimeoutPeriod,
types.DefaultSlashMeterReplenishPeriod,
"1.15",
-1, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}),
nil,
nil,
nil,
@@ -712,7 +685,7 @@ func TestValidateGenesisState(t *testing.T) {
nil,
types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}),
types.DefaultTrustingPeriodFraction, time.Hour, time.Hour, 30*time.Minute, time.Hour, "0.1", 400, sdk.Coin{Denom: "st", Amount: sdk.NewInt(10000000)}),
types.DefaultTrustingPeriodFraction, time.Hour, time.Hour, 30*time.Minute, time.Hour, "0.1", sdk.Coin{Denom: "st", Amount: sdk.NewInt(10000000)}),
nil,
nil,
nil,
@@ -733,7 +706,7 @@ func TestValidateGenesisState(t *testing.T) {
nil,
types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}),
types.DefaultTrustingPeriodFraction, time.Hour, time.Hour, 30*time.Minute, time.Hour, "0.1", 400, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(-1000000)}),
types.DefaultTrustingPeriodFraction, time.Hour, time.Hour, 30*time.Minute, time.Hour, "0.1", sdk.Coin{Denom: "stake", Amount: sdk.NewInt(-1000000)}),
nil,
nil,
nil,
12 changes: 0 additions & 12 deletions x/ccv/provider/types/params.go
Original file line number Diff line number Diff line change
@@ -36,10 +36,6 @@ const (
// that is replenished to the slash meter every replenish period. This param also serves as a maximum
// fraction of total voting power that the slash meter can hold.
DefaultSlashMeterReplenishFraction = "0.05"

// DefaultMaxThrottledPackets defines the default amount of throttled slash or vsc matured packets
// that can be queued for a single consumer before the provider chain halts.
DefaultMaxThrottledPackets = 100000
)

// Reflection based keys for params subspace
@@ -50,7 +46,6 @@ var (
KeyVscTimeoutPeriod = []byte("VscTimeoutPeriod")
KeySlashMeterReplenishPeriod = []byte("SlashMeterReplenishPeriod")
KeySlashMeterReplenishFraction = []byte("SlashMeterReplenishFraction")
KeyMaxThrottledPackets = []byte("MaxThrottledPackets")
KeyConsumerRewardDenomRegistrationFee = []byte("ConsumerRewardDenomRegistrationFee")
)

@@ -68,7 +63,6 @@ func NewParams(
vscTimeoutPeriod time.Duration,
slashMeterReplenishPeriod time.Duration,
slashMeterReplenishFraction string,
maxThrottledPackets int64,
consumerRewardDenomRegistrationFee sdk.Coin,
) Params {
return Params{
@@ -79,7 +73,6 @@ func NewParams(
VscTimeoutPeriod: vscTimeoutPeriod,
SlashMeterReplenishPeriod: slashMeterReplenishPeriod,
SlashMeterReplenishFraction: slashMeterReplenishFraction,
MaxThrottledPackets: maxThrottledPackets,
ConsumerRewardDenomRegistrationFee: consumerRewardDenomRegistrationFee,
}
}
@@ -105,7 +98,6 @@ func DefaultParams() Params {
DefaultVscTimeoutPeriod,
DefaultSlashMeterReplenishPeriod,
DefaultSlashMeterReplenishFraction,
DefaultMaxThrottledPackets,
// Defining this inline because it's not possible to define a constant of type sdk.Coin.
// Following the pattern from cosmos-sdk/staking/types/params.go
sdk.Coin{
@@ -141,9 +133,6 @@ func (p Params) Validate() error {
if err := ccvtypes.ValidateStringFraction(p.SlashMeterReplenishFraction); err != nil {
return fmt.Errorf("slash meter replenish fraction is invalid: %s", err)
}
if err := ccvtypes.ValidatePositiveInt64(p.MaxThrottledPackets); err != nil {
return fmt.Errorf("max throttled packets is invalid: %s", err)
}
if err := ValidateCoin(p.ConsumerRewardDenomRegistrationFee); err != nil {
return fmt.Errorf("consumer reward denom registration fee is invalid: %s", err)
}
@@ -160,7 +149,6 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs {
paramtypes.NewParamSetPair(KeyVscTimeoutPeriod, p.VscTimeoutPeriod, ccvtypes.ValidateDuration),
paramtypes.NewParamSetPair(KeySlashMeterReplenishPeriod, p.SlashMeterReplenishPeriod, ccvtypes.ValidateDuration),
paramtypes.NewParamSetPair(KeySlashMeterReplenishFraction, p.SlashMeterReplenishFraction, ccvtypes.ValidateStringFraction),
paramtypes.NewParamSetPair(KeyMaxThrottledPackets, p.MaxThrottledPackets, ccvtypes.ValidatePositiveInt64),
paramtypes.NewParamSetPair(KeyConsumerRewardDenomRegistrationFee, p.ConsumerRewardDenomRegistrationFee, ValidateCoin),
}
}
27 changes: 12 additions & 15 deletions x/ccv/provider/types/params_test.go
Original file line number Diff line number Diff line change
@@ -24,42 +24,39 @@ func TestValidateParams(t *testing.T) {
{"custom valid params", types.NewParams(
ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}),
"0.33", time.Hour, time.Hour, time.Hour, 30*time.Minute, "0.1", 100, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), true},
"0.33", time.Hour, time.Hour, time.Hour, 30*time.Minute, "0.1", sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), true},
{"custom invalid params", types.NewParams(
ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
0, clienttypes.Height{}, nil, []string{"ibc", "upgradedIBCState"}),
"0.33", time.Hour, time.Hour, time.Hour, 30*time.Minute, "0.1", 100, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), false},
"0.33", time.Hour, time.Hour, time.Hour, 30*time.Minute, "0.1", sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), false},
{"blank client", types.NewParams(&ibctmtypes.ClientState{},
"0.33", time.Hour, time.Hour, time.Hour, 30*time.Minute, "0.1", 100, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), false},
{"nil client", types.NewParams(nil, "0.33", time.Hour, time.Hour, time.Hour, 30*time.Minute, "0.1", 100, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), false},
"0.33", time.Hour, time.Hour, time.Hour, 30*time.Minute, "0.1", sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), false},
{"nil client", types.NewParams(nil, "0.33", time.Hour, time.Hour, time.Hour, 30*time.Minute, "0.1", sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), false},
// Check if "0.00" is valid or if a zero dec TrustFraction needs to return an error
{"0 trusting period fraction", types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}),
"0.00", time.Hour, time.Hour, time.Hour, 30*time.Minute, "0.1", 100, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), true},
"0.00", time.Hour, time.Hour, time.Hour, 30*time.Minute, "0.1", sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), true},
{"0 ccv timeout period", types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}),
"0.33", 0, time.Hour, time.Hour, 30*time.Minute, "0.1", 100, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), false},
"0.33", 0, time.Hour, time.Hour, 30*time.Minute, "0.1", sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), false},
{"0 init timeout period", types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}),
"0.33", time.Hour, 0, time.Hour, 30*time.Minute, "0.1", 100, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), false},
"0.33", time.Hour, 0, time.Hour, 30*time.Minute, "0.1", sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), false},
{"0 vsc timeout period", types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}),
"0.33", time.Hour, time.Hour, 0, 30*time.Minute, "0.1", 100, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), false},
"0.33", time.Hour, time.Hour, 0, 30*time.Minute, "0.1", sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), false},
{"0 slash meter replenish period", types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}),
"0.33", time.Hour, time.Hour, 24*time.Hour, 0, "0.1", 100, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), false},
"0.33", time.Hour, time.Hour, 24*time.Hour, 0, "0.1", sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), false},
{"slash meter replenish fraction over 1", types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}),
"0.33", time.Hour, time.Hour, 24*time.Hour, time.Hour, "1.5", 100, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), false},
{"negative max pending slash packets", types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}),
"0.33", time.Hour, time.Hour, 24*time.Hour, time.Hour, "0.1", -100, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), false},
"0.33", time.Hour, time.Hour, 24*time.Hour, time.Hour, "1.5", sdk.Coin{Denom: "stake", Amount: sdk.NewInt(10000000)}), false},
{"invalid consumer reward denom registration fee denom", types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}),
"0.33", time.Hour, time.Hour, 24*time.Hour, time.Hour, "0.1", -100, sdk.Coin{Denom: "st", Amount: sdk.NewInt(10000000)}), false},
"0.33", time.Hour, time.Hour, 24*time.Hour, time.Hour, "0.1", sdk.Coin{Denom: "st", Amount: sdk.NewInt(10000000)}), false},
{"invalid consumer reward denom registration fee amount", types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0,
time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}),
"0.33", time.Hour, time.Hour, 24*time.Hour, time.Hour, "0.1", -100, sdk.Coin{Denom: "stake", Amount: sdk.NewInt(-10000000)}), false},
"0.33", time.Hour, time.Hour, 24*time.Hour, time.Hour, "0.1", sdk.Coin{Denom: "stake", Amount: sdk.NewInt(-10000000)}), false},
}

for _, tc := range testCases {
254 changes: 108 additions & 146 deletions x/ccv/provider/types/provider.pb.go

Large diffs are not rendered by default.