From 33ea1855b9568ffeec05f626aca734c355cd7098 Mon Sep 17 00:00:00 2001 From: insumity Date: Wed, 2 Oct 2024 14:50:15 +0200 Subject: [PATCH] feat!: enable chains to allowlist reward denoms permissionlessly (#2309) * move big chunk of AllocateTokens to new AllocateConsumerRewards method * update protos to included allowlisted denoms * added state and main functionality * fixed integration tests * add changelogs * read the returned error * took into account comments * remove unused state --- .../2309-allow-permissionless-whitelisting.md | 2 + .../2309-allow-permissionless-whitelisting.md | 2 + .../ccv/provider/v1/provider.proto | 3 + .../ccv/provider/v1/tx.proto | 6 + tests/integration/distribution.go | 105 ++-- x/ccv/provider/ibc_middleware.go | 54 +- x/ccv/provider/keeper/consumer_lifecycle.go | 1 - x/ccv/provider/keeper/distribution.go | 351 ++++++++----- x/ccv/provider/keeper/distribution_test.go | 93 ++-- x/ccv/provider/keeper/msg_server.go | 25 + .../provider/migrations/v8/migrations_test.go | 33 +- x/ccv/provider/types/errors.go | 1 + x/ccv/provider/types/keys.go | 44 +- x/ccv/provider/types/keys_test.go | 10 +- x/ccv/provider/types/provider.pb.go | 460 ++++++++++++------ x/ccv/provider/types/tx.pb.go | 379 ++++++++++----- 16 files changed, 1034 insertions(+), 535 deletions(-) create mode 100644 .changelog/unreleased/features/2309-allow-permissionless-whitelisting.md create mode 100644 .changelog/unreleased/state-breaking/2309-allow-permissionless-whitelisting.md diff --git a/.changelog/unreleased/features/2309-allow-permissionless-whitelisting.md b/.changelog/unreleased/features/2309-allow-permissionless-whitelisting.md new file mode 100644 index 0000000000..c10da4b69c --- /dev/null +++ b/.changelog/unreleased/features/2309-allow-permissionless-whitelisting.md @@ -0,0 +1,2 @@ +- `[x/provider]` Enable permissionless allowlisting of reward denoms (at most 3) per consumer chain. + ([\#2309](https://github.com/cosmos/interchain-security/pull/2309)) diff --git a/.changelog/unreleased/state-breaking/2309-allow-permissionless-whitelisting.md b/.changelog/unreleased/state-breaking/2309-allow-permissionless-whitelisting.md new file mode 100644 index 0000000000..b97980fe74 --- /dev/null +++ b/.changelog/unreleased/state-breaking/2309-allow-permissionless-whitelisting.md @@ -0,0 +1,2 @@ +- `[x/provider]` Enable permissionless allowlisting of reward denoms (at most 3) per consumer chain. + ([\#2309](https://github.com/cosmos/interchain-security/pull/2309)) diff --git a/proto/interchain_security/ccv/provider/v1/provider.proto b/proto/interchain_security/ccv/provider/v1/provider.proto index cc6cb4e00a..e2e6b32c30 100644 --- a/proto/interchain_security/ccv/provider/v1/provider.proto +++ b/proto/interchain_security/ccv/provider/v1/provider.proto @@ -515,3 +515,6 @@ enum ConsumerPhase { // DELETED defines the phase in which the state of a stopped chain has been deleted. CONSUMER_PHASE_DELETED = 5; } + +// AllowlistedRewardDenoms corresponds to the denoms allowlisted by a specific consumer id +message AllowlistedRewardDenoms { repeated string denoms = 1; } \ No newline at end of file diff --git a/proto/interchain_security/ccv/provider/v1/tx.proto b/proto/interchain_security/ccv/provider/v1/tx.proto index 09e49213af..9e89332aef 100644 --- a/proto/interchain_security/ccv/provider/v1/tx.proto +++ b/proto/interchain_security/ccv/provider/v1/tx.proto @@ -360,6 +360,9 @@ message MsgCreateConsumer { ConsumerInitializationParameters initialization_parameters = 4; PowerShapingParameters power_shaping_parameters = 5; + + // allowlisted reward denoms of the consumer + AllowlistedRewardDenoms allowlisted_reward_denoms = 7; } // MsgCreateConsumerResponse defines response type for MsgCreateConsumer @@ -388,6 +391,9 @@ message MsgUpdateConsumer { // the power-shaping parameters of the consumer when updated PowerShapingParameters power_shaping_parameters = 6; + + // allowlisted reward denoms of the consumer (if provided they overwrite previously set reward denoms) + AllowlistedRewardDenoms allowlisted_reward_denoms = 7; } // MsgUpdateConsumerResponse defines response type for MsgUpdateConsumer messages diff --git a/tests/integration/distribution.go b/tests/integration/distribution.go index 71908e134b..425e63e77f 100644 --- a/tests/integration/distribution.go +++ b/tests/integration/distribution.go @@ -107,21 +107,37 @@ func (s *CCVTestSuite) TestRewardsDistribution() { rewardCoins = providerBankKeeper.GetAllBalances(s.providerCtx(), rewardPool) s.Require().Equal(rewardCoins.AmountOf(rewardsIBCdenom), providerExpRewardsAmount) - // Set the consumer reward denom. This would be done by a governance proposal in prod. + // increase the block height so validators are eligible for consumer rewards (see `IsEligibleForConsumerRewards`) + currentProviderBlockHeight := s.providerCtx().BlockHeight() + numberOfBlocksToStartReceivingRewards := providerKeeper.GetNumberOfEpochsToStartReceivingRewards(s.providerCtx()) * providerKeeper.GetBlocksPerEpoch(s.providerCtx()) + for s.providerCtx().BlockHeight() <= currentProviderBlockHeight+numberOfBlocksToStartReceivingRewards { + s.providerChain.NextBlock() + } + + // Allowlist the consumer reward denom. This would be done by a governance proposal in prod. providerKeeper.SetConsumerRewardDenom(s.providerCtx(), rewardsIBCdenom) - // Refill the consumer fee pool - err = consumerBankKeeper.SendCoinsFromAccountToModule( - s.consumerCtx(), - s.consumerChain.SenderAccount.GetAddress(), - authtypes.FeeCollectorName, - fees, - ) + // Even though the reward denom is allowlisted, the rewards are not yet distributed because `BeginBlockRD` has not executed. + // and hence the distribution has not taken place. Because of this, all the rewards are still stored in consumer rewards allocation by denom. + rewardsAlloc, err := providerKeeper.GetConsumerRewardsAllocationByDenom(s.providerCtx(), s.getFirstBundle().ConsumerId, rewardsIBCdenom) s.Require().NoError(err) + remainingAlloc := rewardsAlloc.Rewards.AmountOf(rewardsIBCdenom) + s.Require().Equal( + math.LegacyNewDecFromInt(providerExpRewardsAmount), + rewardsAlloc.Rewards.AmountOf(rewardsIBCdenom), + ) + s.Require().False(remainingAlloc.LTE(math.LegacyOneDec())) - // Pass two blocks - s.consumerChain.NextBlock() - s.consumerChain.NextBlock() + // Move by one block to execute `BeginBlockRD`. + s.providerChain.NextBlock() + + // Consumer allocations are now distributed between the validators and the community pool. + // The decimals resulting from the distribution are expected to remain in the consumer allocations + // and hence the check that remainingAlloc is less than one. + rewardsAlloc, err = providerKeeper.GetConsumerRewardsAllocationByDenom(s.providerCtx(), s.getFirstBundle().ConsumerId, rewardsIBCdenom) + s.Require().NoError(err) + remainingAlloc = rewardsAlloc.Rewards.AmountOf(rewardsIBCdenom) + s.Require().True(remainingAlloc.LTE(math.LegacyOneDec())) // Save the consumer validators total outstanding rewards on the provider consumerValsOutstandingRewardsFunc := func(ctx sdk.Context) sdk.DecCoins { @@ -137,45 +153,17 @@ func (s *CCVTestSuite) TestRewardsDistribution() { valReward, _ := providerDistributionKeeper.GetValidatorOutstandingRewards(ctx, valAddr) totalRewards = totalRewards.Add(valReward.Rewards...) } - return totalRewards - } - consuValsRewards := consumerValsOutstandingRewardsFunc(s.providerCtx()) - // increase the block height so validators are eligible for consumer rewards (see `IsEligibleForConsumerRewards`) - numberOfBlocksToStartReceivingRewards := providerKeeper.GetNumberOfEpochsToStartReceivingRewards(s.providerCtx()) * providerKeeper.GetBlocksPerEpoch(s.providerCtx()) - - for s.providerCtx().BlockHeight() <= numberOfBlocksToStartReceivingRewards { - s.providerChain.NextBlock() + return totalRewards } - // Transfer rewards from consumer to provider and distribute rewards to - // validators and community pool by calling BeginBlockRD - relayAllCommittedPackets( - s, - s.consumerChain, - s.transferPath, - transfertypes.PortID, - s.transferPath.EndpointA.ChannelID, - 1, - ) - - // Consumer allocations are distributed between the validators and the community pool. - // The decimals resulting from the distribution are expected to remain in the consumer allocations. - rewardsAlloc := providerKeeper.GetConsumerRewardsAllocation(s.providerCtx(), s.getFirstBundle().ConsumerId) - remainingAlloc := rewardsAlloc.Rewards.AmountOf(rewardsIBCdenom) - s.Require().True(remainingAlloc.LTE(math.LegacyOneDec())) - - // Check that the reward pool still holds the coins from the first transfer - // which were never allocated since they were not whitelisted - // plus the remaining decimals from the second transfer. + // Check that the reward pool does not hold the coins from the transfer because + // after the coin got allowlisted, all coins of this denom were distributed. rewardCoins = providerBankKeeper.GetAllBalances(s.providerCtx(), rewardPool) - s.Require().Equal( - math.LegacyNewDecFromInt(rewardCoins.AmountOf(rewardsIBCdenom)), - math.LegacyNewDecFromInt(providerExpRewardsAmount).Add(remainingAlloc), - ) + s.Require().True(rewardCoins.AmountOf(rewardsIBCdenom).LTE(math.NewInt(1))) // Check that the distribution module account balance is equal to the consumer rewards - consuValsRewardsReceived := consumerValsOutstandingRewardsFunc(s.providerCtx()).Sub(consuValsRewards) + consuValsRewardsReceived := consumerValsOutstandingRewardsFunc(s.providerCtx()) distrAcct := providerDistributionKeeper.GetDistributionAccount(s.providerCtx()) distrAcctBalance := providerBankKeeper.GetAllBalances(s.providerCtx(), distrAcct.GetAddress()) @@ -259,7 +247,7 @@ func (s *CCVTestSuite) TestSendRewardsRetries() { } // TestEndBlockRD tests that the last transmission block height (LTBH) is correctly updated after the expected -// number of block have passed. It also checks that the IBC transfer transfer states are discarded if +// number of block have passed. It also checks that the IBC transfer states are discarded if // the reward distribution to the provider has failed. // // Note: this method is effectively a unit test for EndBLockRD(), but is written as an integration test to avoid excessive mocking. @@ -570,7 +558,7 @@ func (s *CCVTestSuite) TestIBCTransferMiddleware() { { "IBC Transfer coin denom isn't registered", func(ctx sdk.Context, keeper *providerkeeper.Keeper, bankKeeper icstestingutils.TestBankKeeper) {}, - false, + true, // even if the denom is not registered/allowlisted, the rewards are still allocated by denom false, }, { @@ -600,9 +588,10 @@ func (s *CCVTestSuite) TestIBCTransferMiddleware() { sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, math.NewInt(100_000))), ) // update consumer allocation - keeper.SetConsumerRewardsAllocation( + keeper.SetConsumerRewardsAllocationByDenom( ctx, s.getFirstBundle().ConsumerId, + getIBCDenom(packet.DestinationPort, packet.DestinationChannel), providertypes.ConsumerRewardsAllocation{ Rewards: sdk.NewDecCoins(sdk.NewDecCoin(sdk.DefaultBondDenom, math.NewInt(100_000))), }, @@ -669,7 +658,9 @@ func (s *CCVTestSuite) TestIBCTransferMiddleware() { rewardsPoolBalance := bankKeeper.GetAllBalances(s.providerCtx(), sdk.MustAccAddressFromBech32(data.Receiver)) // save the consumer's rewards allocated - consumerRewardsAllocations := providerKeeper.GetConsumerRewardsAllocation(s.providerCtx(), s.getFirstBundle().ConsumerId) + ibcDenom := getIBCDenom(packet.DestinationPort, packet.DestinationChannel) + consumerRewardsAllocations, err := providerKeeper.GetConsumerRewardsAllocationByDenom(s.providerCtx(), s.getFirstBundle().ConsumerId, ibcDenom) + s.Require().NoError(err) // execute middleware OnRecvPacket logic ack := cbs.OnRecvPacket(s.providerCtx(), packet, sdk.AccAddress{}) @@ -677,14 +668,15 @@ func (s *CCVTestSuite) TestIBCTransferMiddleware() { // compute expected rewards with provider denom expRewards := sdk.Coin{ Amount: amount, - Denom: getIBCDenom(packet.DestinationPort, packet.DestinationChannel), + Denom: ibcDenom, } // compute the balance and allocation difference rewardsTransferred := bankKeeper.GetAllBalances(s.providerCtx(), sdk.MustAccAddressFromBech32(data.Receiver)). Sub(rewardsPoolBalance...) - rewardsAllocated := providerKeeper.GetConsumerRewardsAllocation(s.providerCtx(), s.getFirstBundle().ConsumerId). - Rewards.Sub(consumerRewardsAllocations.Rewards) + rewardsAllocatedByDenom, err := providerKeeper.GetConsumerRewardsAllocationByDenom(s.providerCtx(), s.getFirstBundle().ConsumerId, ibcDenom) + s.Require().NoError(err) + rewardsAllocated := rewardsAllocatedByDenom.Rewards.Sub(consumerRewardsAllocations.Rewards) if !tc.expErr { s.Require().True(ack.Success()) @@ -738,13 +730,18 @@ func (s *CCVTestSuite) TestAllocateTokens() { totalRewards, ) + // Allowlist a reward denom that the allocated rewards have + ibcDenom := "ibc/somedenom" + providerKeeper.SetConsumerRewardDenom(providerCtx, ibcDenom) + // Allocate rewards evenly between consumers rewardsPerChain := totalRewards.QuoInt(math.NewInt(int64(len(s.consumerBundles)))) for consumerId := range s.consumerBundles { // update consumer allocation - providerKeeper.SetConsumerRewardsAllocation( + providerKeeper.SetConsumerRewardsAllocationByDenom( providerCtx, consumerId, + ibcDenom, providertypes.ConsumerRewardsAllocation{ Rewards: sdk.NewDecCoinsFromCoins(rewardsPerChain...), }, @@ -798,7 +795,9 @@ func (s *CCVTestSuite) TestAllocateTokens() { // check that the total expected rewards are transferred to the distribution module account // store the decimal remainders in the consumer reward allocations - allocRemainderPerChain := providerKeeper.GetConsumerRewardsAllocation(providerCtx, s.getFirstBundle().ConsumerId).Rewards + allocRemainderPerChainRes, err := providerKeeper.GetConsumerRewardsAllocationByDenom(providerCtx, s.getFirstBundle().ConsumerId, ibcDenom) + s.Require().NoError(err) + allocRemainderPerChain := allocRemainderPerChainRes.Rewards // compute the total rewards distributed to the distribution module balance (validator outstanding rewards + community pool tax), totalRewardsDistributed := sdk.NewDecCoinsFromCoins(totalRewards...).Sub(allocRemainderPerChain.MulDec(math.LegacyNewDec(int64(consNum)))) diff --git a/x/ccv/provider/ibc_middleware.go b/x/ccv/provider/ibc_middleware.go index 46d158e5e0..2ea741ad3b 100644 --- a/x/ccv/provider/ibc_middleware.go +++ b/x/ccv/provider/ibc_middleware.go @@ -192,30 +192,48 @@ func (im IBCMiddleware) OnRecvPacket( sdk.NewAttribute(types.AttributeRewardAmount, data.Amount), }...) - // verify that the coin's denom is a whitelisted consumer denom, - // and if so, adds it to the consumer chain rewards allocation, - // otherwise the prohibited coin just stays in the pool forever. - if im.keeper.ConsumerRewardDenomExists(ctx, coinDenom) { - alloc := im.keeper.GetConsumerRewardsAllocation(ctx, consumerId) - alloc.Rewards = alloc.Rewards.Add( - sdk.NewDecCoinsFromCoins(sdk.Coin{ - Denom: coinDenom, - Amount: coinAmt, - })...) - im.keeper.SetConsumerRewardsAllocation(ctx, consumerId, alloc) - - logger.Info( - "scheduled ICS rewards to be distributed", + alloc, err := im.keeper.GetConsumerRewardsAllocationByDenom(ctx, consumerId, coinDenom) + if err != nil { + logger.Error( + "cannot get consumer rewards by denom", "consumerId", consumerId, - "chainId", chainId, + "packet", packet.String(), + "fungibleTokenPacketData", data.String(), "denom", coinDenom, - "amount", data.Amount, + "error", err.Error(), ) + return ack + } - // add RewardDistribution event attribute - eventAttributes = append(eventAttributes, sdk.NewAttribute(types.AttributeRewardDistribution, "scheduled")) + alloc.Rewards = alloc.Rewards.Add( + sdk.NewDecCoinFromCoin(sdk.Coin{ + Denom: coinDenom, + Amount: coinAmt, + })) + err = im.keeper.SetConsumerRewardsAllocationByDenom(ctx, consumerId, coinDenom, alloc) + if err != nil { + logger.Error( + "cannot set consumer rewards by denom", + "consumerId", consumerId, + "packet", packet.String(), + "fungibleTokenPacketData", data.String(), + "denom", coinDenom, + "error", err.Error(), + ) + return ack } + logger.Info( + "scheduled ICS rewards to be distributed", + "consumerId", consumerId, + "chainId", chainId, + "denom", coinDenom, + "amount", data.Amount, + ) + + // add RewardDistribution event attribute + eventAttributes = append(eventAttributes, sdk.NewAttribute(types.AttributeRewardDistribution, "scheduled")) + ctx.EventManager().EmitEvent( sdk.NewEvent( types.EventTypeUpdateConsumer, diff --git a/x/ccv/provider/keeper/consumer_lifecycle.go b/x/ccv/provider/keeper/consumer_lifecycle.go index c578df4ff2..7bde45df8a 100644 --- a/x/ccv/provider/keeper/consumer_lifecycle.go +++ b/x/ccv/provider/keeper/consumer_lifecycle.go @@ -487,7 +487,6 @@ func (k Keeper) DeleteConsumerChain(ctx sdk.Context, consumerId string) (err err k.DeleteAllOptedIn(ctx, consumerId) k.DeleteConsumerValSet(ctx, consumerId) - k.DeleteConsumerRewardsAllocation(ctx, consumerId) k.DeleteConsumerRemovalTime(ctx, consumerId) // TODO (PERMISSIONLESS) add newly-added state to be deleted diff --git a/x/ccv/provider/keeper/distribution.go b/x/ccv/provider/keeper/distribution.go index 3d47813112..7bfc1e8c83 100644 --- a/x/ccv/provider/keeper/distribution.go +++ b/x/ccv/provider/keeper/distribution.go @@ -2,7 +2,6 @@ package keeper import ( "context" - channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" errorsmod "cosmossdk.io/errors" @@ -67,108 +66,97 @@ func (k Keeper) GetAllConsumerRewardDenoms(ctx sdk.Context) (consumerRewardDenom return consumerRewardDenoms } -// AllocateTokens performs rewards distribution to the community pool and validators -// based on the Partial Set Security distribution specification. -func (k Keeper) AllocateTokens(ctx sdk.Context) { - // return if there is no coins in the consumer rewards pool - if k.GetConsumerRewardsPool(ctx).IsZero() { - return +// GetAllowlistedRewardDenoms returns the allowlisted reward denom for the given consumer id. +func (k Keeper) GetAllowlistedRewardDenoms(ctx sdk.Context, consumerId string) ([]string, error) { + store := ctx.KVStore(k.storeKey) + bz := store.Get(types.ConsumerIdToAllowlistedRewardDenomKey(consumerId)) + if bz == nil { + return []string{}, nil } - // Iterate over all launched consumer chains. - // To avoid large iterations over all the consumer IDs, iterate only over - // chains with an IBC client created. - for _, consumerId := range k.GetAllConsumersWithIBCClients(ctx) { - // note that it's possible that no rewards are collected even though the - // reward pool isn't empty. This can happen if the reward pool holds some tokens - // of non-whitelisted denominations. - alloc := k.GetConsumerRewardsAllocation(ctx, consumerId) - if alloc.Rewards.IsZero() { - continue - } + var denoms types.AllowlistedRewardDenoms + if err := denoms.Unmarshal(bz); err != nil { + return []string{}, err + } + return denoms.Denoms, nil +} - chainId, err := k.GetConsumerChainId(ctx, consumerId) - if err != nil { - k.Logger(ctx).Error( - "cannot get consumer chain id in AllocateTokens", - "consumerId", consumerId, - "error", err.Error(), - ) - continue - } +// SetAllowlistedRewardDenoms sets the allowlisted reward denoms for the given consumer id. +func (k Keeper) SetAllowlistedRewardDenoms(ctx sdk.Context, consumerId string, rewardDenoms []string) error { + store := ctx.KVStore(k.storeKey) + allowlistedUpdatedDenoms := types.AllowlistedRewardDenoms{Denoms: rewardDenoms} + bz, err := allowlistedUpdatedDenoms.Marshal() + if err != nil { + return err + } + store.Set(types.ConsumerIdToAllowlistedRewardDenomKey(consumerId), bz) + return nil +} - // temporary workaround to keep CanWithdrawInvariant happy - // general discussions here: https://github.com/cosmos/cosmos-sdk/issues/2906#issuecomment-441867634 - if k.ComputeConsumerTotalVotingPower(ctx, consumerId) == 0 { - rewardsToSend, rewardsChange := alloc.Rewards.TruncateDecimal() - err := k.distributionKeeper.FundCommunityPool(context.Context(ctx), rewardsToSend, k.accountKeeper.GetModuleAccount(ctx, types.ConsumerRewardsPool).GetAddress()) - if err != nil { - k.Logger(ctx).Error( - "fail to allocate ICS rewards to community pool", - "consumerId", consumerId, - "chainId", chainId, - "error", err.Error(), - ) - } - k.Logger(ctx).Info( - "allocated ICS rewards to community pool", - "consumerId", consumerId, - "chainId", chainId, - "amount", rewardsToSend.String(), - ) +// DeleteAllowlistedRewardDenoms deletes the allowlisted reward denom for the given consumer id. +func (k Keeper) DeleteAllowlistedRewardDenoms(ctx sdk.Context, consumerId string) { + store := ctx.KVStore(k.storeKey) + store.Delete(types.ConsumerIdToAllowlistedRewardDenomKey(consumerId)) +} - // set the consumer allocation to the remaining reward decimals - alloc.Rewards = rewardsChange - k.SetConsumerRewardsAllocation(ctx, consumerId, alloc) +// UpdateAllowlistedRewardDenoms updates the allowlisted reward denoms for this consumer chain with the provided `rewardDenoms` +func (k Keeper) UpdateAllowlistedRewardDenoms(ctx sdk.Context, consumerId string, rewardDenoms []string) error { + k.DeleteAllowlistedRewardDenoms(ctx, consumerId) + return k.SetAllowlistedRewardDenoms(ctx, consumerId, rewardDenoms) +} - return - } +// GetConsumerRewardsAllocationByDenom returns the consumer rewards allocation for the given consumer id and denom +func (k Keeper) GetConsumerRewardsAllocationByDenom(ctx sdk.Context, consumerId string, denom string) (types.ConsumerRewardsAllocation, error) { + store := ctx.KVStore(k.storeKey) + bz := store.Get(types.ConsumerRewardsAllocationByDenomKey(consumerId, denom)) - // Consumer rewards are distributed between the validators and the community pool. - // The decimals resulting from the distribution are expected to remain in the consumer reward allocations. + var rewardsAllocation types.ConsumerRewardsAllocation + err := rewardsAllocation.Unmarshal(bz) + if err != nil { + return types.ConsumerRewardsAllocation{}, err + } - communityTax, err := k.distributionKeeper.GetCommunityTax(ctx) - if err != nil { - k.Logger(ctx).Error( - "cannot get community tax while allocating ICS rewards", - "consumerId", consumerId, - "chainId", chainId, - "error", err.Error(), - ) - continue - } + return rewardsAllocation, nil +} - // compute rewards for validators - consumerRewards := alloc.Rewards - voteMultiplier := math.LegacyOneDec().Sub(communityTax) - validatorsRewards := consumerRewards.MulDecTruncate(voteMultiplier) +// SetConsumerRewardsAllocationByDenom sets the consumer rewards allocation for the given consumer id and denom +func (k Keeper) SetConsumerRewardsAllocationByDenom(ctx sdk.Context, consumerId string, denom string, rewardsAllocation types.ConsumerRewardsAllocation) error { + store := ctx.KVStore(k.storeKey) + bz, err := rewardsAllocation.Marshal() + if err != nil { + return err + } + store.Set(types.ConsumerRewardsAllocationByDenomKey(consumerId, denom), bz) + return nil +} - // compute remaining rewards for the community pool - remaining := consumerRewards.Sub(validatorsRewards) +// DeleteConsumerRewardsAllocationByDenom deletes the consumer rewards allocation for the given consumer id and denom +func (k Keeper) DeleteConsumerRewardsAllocationByDenom(ctx sdk.Context, consumerId string, denom string) { + store := ctx.KVStore(k.storeKey) + store.Delete(types.ConsumerRewardsAllocationByDenomKey(consumerId, denom)) +} - // transfer validators rewards to distribution module account - validatorsRewardsTrunc, validatorsRewardsChange := validatorsRewards.TruncateDecimal() - err = k.bankKeeper.SendCoinsFromModuleToModule(ctx, types.ConsumerRewardsPool, distrtypes.ModuleName, validatorsRewardsTrunc) - if err != nil { - k.Logger(ctx).Error( - "cannot send ICS rewards to distribution module account", - "consumerId", consumerId, - "chainId", chainId, - "error", err.Error(), - ) - continue - } +// AllocateConsumerRewards allocates the given rewards to provider consumer chain with the given consumer id +func (k Keeper) AllocateConsumerRewards(ctx sdk.Context, consumerId string, alloc types.ConsumerRewardsAllocation) (types.ConsumerRewardsAllocation, error) { + if alloc.Rewards.IsZero() { + return types.ConsumerRewardsAllocation{}, nil + } - // allocate tokens to consumer validators - k.AllocateTokensToConsumerValidators( - ctx, - consumerId, - sdk.NewDecCoinsFromCoins(validatorsRewardsTrunc...), + chainId, err := k.GetConsumerChainId(ctx, consumerId) + if err != nil { + k.Logger(ctx).Error( + "cannot get consumer chain id in AllocateConsumerRewards", + "consumerId", consumerId, + "error", err.Error(), ) + return types.ConsumerRewardsAllocation{}, err + } - // allocate remaining rewards to the community pool - remainingRewards, remainingChanges := remaining.TruncateDecimal() - err = k.distributionKeeper.FundCommunityPool(context.Context(ctx), remainingRewards, k.accountKeeper.GetModuleAccount(ctx, types.ConsumerRewardsPool).GetAddress()) + // temporary workaround to keep CanWithdrawInvariant happy + // general discussions here: https://github.com/cosmos/cosmos-sdk/issues/2906#issuecomment-441867634 + if k.ComputeConsumerTotalVotingPower(ctx, consumerId) == 0 { + rewardsToSend, rewardsChange := alloc.Rewards.TruncateDecimal() + err := k.distributionKeeper.FundCommunityPool(context.Context(ctx), rewardsToSend, k.accountKeeper.GetModuleAccount(ctx, types.ConsumerRewardsPool).GetAddress()) if err != nil { k.Logger(ctx).Error( "fail to allocate ICS rewards to community pool", @@ -176,33 +164,159 @@ func (k Keeper) AllocateTokens(ctx sdk.Context) { "chainId", chainId, "error", err.Error(), ) - continue } + k.Logger(ctx).Info( + "allocated ICS rewards to community pool", + "consumerId", consumerId, + "chainId", chainId, + "amount", rewardsToSend.String(), + ) - // set consumer allocations to the remaining rewards decimals - alloc.Rewards = validatorsRewardsChange.Add(remainingChanges...) - k.SetConsumerRewardsAllocation(ctx, consumerId, alloc) + // set the consumer allocation to the remaining reward decimals + alloc.Rewards = rewardsChange - k.Logger(ctx).Info( - "distributed ICS rewards successfully", + return alloc, nil + } + + // Consumer rewards are distributed between the validators and the community pool. + // The decimals resulting from the distribution are expected to remain in the consumer reward allocations. + + communityTax, err := k.distributionKeeper.GetCommunityTax(ctx) + if err != nil { + k.Logger(ctx).Error( + "cannot get community tax while allocating ICS rewards", "consumerId", consumerId, "chainId", chainId, - "total-rewards", consumerRewards.String(), - "sent-to-distribution", validatorsRewardsTrunc.String(), - "sent-to-CP", remainingRewards.String(), + "error", err.Error(), ) + return types.ConsumerRewardsAllocation{}, err + } + + // compute rewards for validators + consumerRewards := alloc.Rewards + voteMultiplier := math.LegacyOneDec().Sub(communityTax) + validatorsRewards := consumerRewards.MulDecTruncate(voteMultiplier) - ctx.EventManager().EmitEvent( - sdk.NewEvent( - types.EventTypeDistributedRewards, - sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), - sdk.NewAttribute(types.AttributeConsumerId, consumerId), - sdk.NewAttribute(types.AttributeConsumerChainId, chainId), - sdk.NewAttribute(types.AttributeRewardTotal, consumerRewards.String()), - sdk.NewAttribute(types.AttributeRewardDistributed, validatorsRewardsTrunc.String()), - sdk.NewAttribute(types.AttributeRewardCommunityPool, remainingRewards.String()), - ), + // compute remaining rewards for the community pool + remaining := consumerRewards.Sub(validatorsRewards) + + // transfer validators rewards to distribution module account + validatorsRewardsTrunc, validatorsRewardsChange := validatorsRewards.TruncateDecimal() + err = k.bankKeeper.SendCoinsFromModuleToModule(ctx, types.ConsumerRewardsPool, distrtypes.ModuleName, validatorsRewardsTrunc) + if err != nil { + k.Logger(ctx).Error( + "cannot send ICS rewards to distribution module account", + "consumerId", consumerId, + "chainId", chainId, + "error", err.Error(), ) + return types.ConsumerRewardsAllocation{}, err + } + + // allocate tokens to consumer validators + k.AllocateTokensToConsumerValidators( + ctx, + consumerId, + sdk.NewDecCoinsFromCoins(validatorsRewardsTrunc...), + ) + + // allocate remaining rewards to the community pool + remainingRewards, remainingChanges := remaining.TruncateDecimal() + err = k.distributionKeeper.FundCommunityPool(context.Context(ctx), remainingRewards, k.accountKeeper.GetModuleAccount(ctx, types.ConsumerRewardsPool).GetAddress()) + if err != nil { + k.Logger(ctx).Error( + "fail to allocate ICS rewards to community pool", + "consumerId", consumerId, + "chainId", chainId, + "error", err.Error(), + ) + return types.ConsumerRewardsAllocation{}, err + } + + // set consumer allocations to the remaining rewards decimals + alloc.Rewards = validatorsRewardsChange.Add(remainingChanges...) + + k.Logger(ctx).Info( + "distributed ICS rewards successfully", + "consumerId", consumerId, + "chainId", chainId, + "total-rewards", consumerRewards.String(), + "sent-to-validators", validatorsRewardsTrunc.String(), + "sent-to-CP", remainingRewards.String(), + ) + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeDistributedRewards, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeConsumerId, consumerId), + sdk.NewAttribute(types.AttributeConsumerChainId, chainId), + sdk.NewAttribute(types.AttributeRewardTotal, consumerRewards.String()), + sdk.NewAttribute(types.AttributeRewardDistributed, validatorsRewardsTrunc.String()), + sdk.NewAttribute(types.AttributeRewardCommunityPool, remainingRewards.String()), + ), + ) + return alloc, nil +} + +// AllocateTokens performs rewards distribution to the community pool and validators +// based on the Partial Set Security distribution specification. +func (k Keeper) AllocateTokens(ctx sdk.Context) { + // return if there is no coins in the consumer rewards pool + if k.GetConsumerRewardsPool(ctx).IsZero() { + return + } + + // Iterate over all launched consumer chains. + // To avoid large iterations over all the consumer IDs, iterate only over + // chains with an IBC client created. + allConsumerRewardDenoms := k.GetAllConsumerRewardDenoms(ctx) // corresponds to allowlisted denoms that were allowlisted through governance + for _, consumerId := range k.GetAllConsumersWithIBCClients(ctx) { + // also consider this chain's allowlisted reward denoms + consumerAllowlistedRewardDenoms, err := k.GetAllowlistedRewardDenoms(ctx, consumerId) + if err != nil { + k.Logger(ctx).Error( + "fail to retrieve the allowlisted reward denoms for consumer chain", + "consumer id", consumerId, + "error", err.Error()) + continue + } + + allAllowlistedDenoms := append(allConsumerRewardDenoms, consumerAllowlistedRewardDenoms...) + for _, denom := range allAllowlistedDenoms { + // use a cached context to verify that the call to `AllocateConsumerRewards` is atomic, and hence + // all transfers in `AllocateConsumerRewards` happen all together or not at all. + cachedCtx, writeCache := ctx.CacheContext() + consumerRewards, err := k.GetConsumerRewardsAllocationByDenom(cachedCtx, consumerId, denom) + if err != nil { + k.Logger(ctx).Error( + "failed to get the consumer rewards allocation for this denom", + "consumer id", consumerId, + "denom", denom, + "error", err.Error(), + ) + continue + } + remainingRewardDec, err := k.AllocateConsumerRewards(cachedCtx, consumerId, consumerRewards) + if err != nil { + k.Logger(ctx).Error( + "fail to allocate rewards for consumer chain", + "consumer id", consumerId, + "error", err.Error(), + ) + continue + } + err = k.SetConsumerRewardsAllocationByDenom(cachedCtx, consumerId, denom, remainingRewardDec) + if err != nil { + k.Logger(ctx).Error( + "fail to set rewards for consumer chain", + "consumer id", consumerId, + "error", err.Error(), + ) + continue + } + writeCache() + } } } @@ -297,27 +411,6 @@ func (k Keeper) AllocateTokensToConsumerValidators( // consumer reward pools getter and setter -// GetConsumerRewardsAllocation returns the consumer rewards allocation for the given consumer id -func (k Keeper) GetConsumerRewardsAllocation(ctx sdk.Context, consumerId string) (pool types.ConsumerRewardsAllocation) { - store := ctx.KVStore(k.storeKey) - b := store.Get(types.ConsumerRewardsAllocationKey(consumerId)) - k.cdc.MustUnmarshal(b, &pool) - return -} - -// SetConsumerRewardsAllocation sets the consumer rewards allocation for the given consumer id -func (k Keeper) SetConsumerRewardsAllocation(ctx sdk.Context, consumerId string, pool types.ConsumerRewardsAllocation) { - store := ctx.KVStore(k.storeKey) - b := k.cdc.MustMarshal(&pool) - store.Set(types.ConsumerRewardsAllocationKey(consumerId), b) -} - -// DeleteConsumerRewardsAllocation deletes the consumer rewards allocation for the given consumer id -func (k Keeper) DeleteConsumerRewardsAllocation(ctx sdk.Context, consumerId string) { - store := ctx.KVStore(k.storeKey) - store.Delete(types.ConsumerRewardsAllocationKey(consumerId)) -} - // GetConsumerRewardsPool returns the balance // of the consumer rewards pool module account func (k Keeper) GetConsumerRewardsPool(ctx sdk.Context) sdk.Coins { diff --git a/x/ccv/provider/keeper/distribution_test.go b/x/ccv/provider/keeper/distribution_test.go index ba48758c21..6c926aa6b5 100644 --- a/x/ccv/provider/keeper/distribution_test.go +++ b/x/ccv/provider/keeper/distribution_test.go @@ -245,42 +245,6 @@ func TestIdentifyConsumerChainIDFromIBCPacket(t *testing.T) { } } -func TestSetConsumerRewardsAllocation(t *testing.T) { - keeperParams := testkeeper.NewInMemKeeperParams(t) - ctx := keeperParams.Ctx - - ctrl := gomock.NewController(t) - defer ctrl.Finish() - mocks := testkeeper.NewMockedKeepers(ctrl) - providerKeeper := testkeeper.NewInMemProviderKeeper(keeperParams, mocks) - - rewardAllocation := providertypes.ConsumerRewardsAllocation{ - Rewards: sdk.NewDecCoins(sdk.NewDecCoin("uatom", math.NewInt(1000))), - } - - providerKeeper.SetConsumerRewardsAllocation(ctx, "consumer-1", rewardAllocation) - - alloc := providerKeeper.GetConsumerRewardsAllocation(ctx, "consumer-1") - require.Equal(t, rewardAllocation, alloc) -} - -func TestGetConsumerRewardsAllocationNil(t *testing.T) { - keeperParams := testkeeper.NewInMemKeeperParams(t) - ctx := keeperParams.Ctx - - ctrl := gomock.NewController(t) - defer ctrl.Finish() - mocks := testkeeper.NewMockedKeepers(ctrl) - providerKeeper := testkeeper.NewInMemProviderKeeper(keeperParams, mocks) - - alloc := providerKeeper.GetConsumerRewardsAllocation(ctx, "consumer-1") - - expectedRewardAllocation := providertypes.ConsumerRewardsAllocation{ - Rewards: nil, - } - require.Equal(t, expectedRewardAllocation, alloc) -} - func TestIsEligibleForConsumerRewards(t *testing.T) { keeper, ctx, ctrl, _ := testkeeper.GetProviderKeeperAndCtx(t, testkeeper.NewInMemKeeperParams(t)) defer ctrl.Finish() @@ -377,3 +341,60 @@ func TestHandleSetConsumerCommissionRate(t *testing.T) { require.Equal(t, commissionRate, cr) require.True(t, found) } + +// TestAllowlistedRewardDenoms tests the `GetAllowlistedRewardDenoms`, `SetAllowlistedRewardDenom`, +// `UpdateAllowlistedRewardDenoms` and `DeleteAllowlistedRewardDenoms` methods. +func TestAllowlistedRewardDenoms(t *testing.T) { + providerKeeper, ctx, ctrl, _ := testkeeper.GetProviderKeeperAndCtx(t, testkeeper.NewInMemKeeperParams(t)) + defer ctrl.Finish() + + consumerId := "0" + denoms, err := providerKeeper.GetAllowlistedRewardDenoms(ctx, consumerId) + require.Empty(t, denoms) + require.NoError(t, err) + + denomsToSet := []string{"denom1", "denom2", "denom3"} + providerKeeper.SetAllowlistedRewardDenoms(ctx, consumerId, denomsToSet) + + denoms, err = providerKeeper.GetAllowlistedRewardDenoms(ctx, consumerId) + require.Equal(t, denomsToSet, denoms) + require.NoError(t, err) + + updatedDenoms := []string{"updatedDenom1", "updatedDenom2"} + err = providerKeeper.UpdateAllowlistedRewardDenoms(ctx, consumerId, updatedDenoms) + require.NoError(t, err) + denoms, err = providerKeeper.GetAllowlistedRewardDenoms(ctx, consumerId) + require.Equal(t, updatedDenoms, denoms) + require.NoError(t, err) + + providerKeeper.DeleteAllowlistedRewardDenoms(ctx, consumerId) + denoms, err = providerKeeper.GetAllowlistedRewardDenoms(ctx, consumerId) + require.Empty(t, denoms) + require.NoError(t, err) +} + +// TestConsumerRewardsAllocationByDenom tests the `*ConsumerRewardsAllocationByDenom* methods +func TestConsumerRewardsAllocationByDenom(t *testing.T) { + providerKeeper, ctx, ctrl, _ := testkeeper.GetProviderKeeperAndCtx(t, testkeeper.NewInMemKeeperParams(t)) + defer ctrl.Finish() + + consumerId := "0" + denom := "denom" + rewards, err := providerKeeper.GetConsumerRewardsAllocationByDenom(ctx, consumerId, denom) + require.Empty(t, rewards.Rewards) + require.NoError(t, err) + + rewardAllocation := providertypes.ConsumerRewardsAllocation{ + Rewards: sdk.NewDecCoins(sdk.NewDecCoin("uatom", math.NewInt(1000))), + } + + err = providerKeeper.SetConsumerRewardsAllocationByDenom(ctx, consumerId, denom, rewardAllocation) + rewards, err = providerKeeper.GetConsumerRewardsAllocationByDenom(ctx, consumerId, denom) + require.Equal(t, rewardAllocation, rewards) + require.NoError(t, err) + + providerKeeper.DeleteConsumerRewardsAllocationByDenom(ctx, consumerId, denom) + rewards, err = providerKeeper.GetConsumerRewardsAllocationByDenom(ctx, consumerId, denom) + require.Empty(t, rewards.Rewards) + require.NoError(t, err) +} diff --git a/x/ccv/provider/keeper/msg_server.go b/x/ccv/provider/keeper/msg_server.go index ff1c082183..fbef100bb9 100644 --- a/x/ccv/provider/keeper/msg_server.go +++ b/x/ccv/provider/keeper/msg_server.go @@ -414,6 +414,19 @@ func (k msgServer) CreateConsumer(goCtx context.Context, msg *types.MsgCreateCon sdk.NewAttribute(types.AttributeConsumerSpawnTime, initializationParameters.SpawnTime.String())) } + if msg.AllowlistedRewardDenoms != nil { + if len(msg.AllowlistedRewardDenoms.Denoms) > types.MaxAllowlistedRewardDenomsPerChain { + return &resp, errorsmod.Wrapf(types.ErrInvalidAllowlistedRewardDenoms, + fmt.Sprintf("a consumer chain cannot allowlist more than %d reward denoms", types.MaxAllowlistedRewardDenomsPerChain)) + } + + err := k.UpdateAllowlistedRewardDenoms(ctx, consumerId, msg.AllowlistedRewardDenoms.Denoms) + if err != nil { + return &resp, errorsmod.Wrapf(types.ErrInvalidAllowlistedRewardDenoms, + "cannot update allowlisted reward denoms: %s", err.Error()) + } + } + // add Phase event attribute phase := k.GetConsumerPhase(ctx, consumerId) eventAttributes = append(eventAttributes, sdk.NewAttribute(types.AttributeConsumerPhase, phase.String())) @@ -589,6 +602,18 @@ func (k msgServer) UpdateConsumer(goCtx context.Context, msg *types.MsgUpdateCon } } + if msg.AllowlistedRewardDenoms != nil { + if len(msg.AllowlistedRewardDenoms.Denoms) > types.MaxAllowlistedRewardDenomsPerChain { + return &resp, errorsmod.Wrapf(types.ErrInvalidAllowlistedRewardDenoms, + fmt.Sprintf("a consumer chain cannot allowlist more than %d reward denoms", types.MaxAllowlistedRewardDenomsPerChain)) + } + + if err := k.UpdateAllowlistedRewardDenoms(ctx, consumerId, msg.AllowlistedRewardDenoms.Denoms); err != nil { + return &resp, errorsmod.Wrapf(types.ErrInvalidAllowlistedRewardDenoms, + "cannot update allowlisted reward denoms: %s", err.Error()) + } + } + // add Owner event attribute eventAttributes = append(eventAttributes, sdk.NewAttribute(types.AttributeConsumerOwner, currentOwnerAddress)) diff --git a/x/ccv/provider/migrations/v8/migrations_test.go b/x/ccv/provider/migrations/v8/migrations_test.go index c8d98115dc..01dc0f0a2e 100644 --- a/x/ccv/provider/migrations/v8/migrations_test.go +++ b/x/ccv/provider/migrations/v8/migrations_test.go @@ -203,8 +203,6 @@ func StoreChainDataUsingChainIdAsKey(ctx sdk.Context, store storetypes.KVStore, providerKeeper.SetDenylist(ctx, data.ChainId, data.ProviderAddr) - providerKeeper.SetConsumerRewardsAllocation(ctx, data.ChainId, data.ConsumerRewardsAllocation) - providerKeeper.SetConsumerCommissionRate(ctx, data.ChainId, data.ProviderAddr, data.ConsumerCommissionRate) providerKeeper.SetMinimumPowerInTopN(ctx, data.ChainId, data.MinimumPowerInTopN) @@ -291,8 +289,6 @@ func GetChainDataUsingStringId(ctx sdk.Context, providerKeeper providerkeeper.Ke } } - data.ConsumerRewardsAllocation = providerKeeper.GetConsumerRewardsAllocation(ctx, id) - consumerCommissionRate, found := providerKeeper.GetConsumerCommissionRate(ctx, id, providerAddr) if found { data.ConsumerCommissionRate = consumerCommissionRate @@ -328,21 +324,20 @@ func CreateTestChainData(chainId string, clientId string, channelId string) Chai Params: types.ConsumerParams{ConsumerRedistributionFraction: "redistribution fraction"}, NewChain: true, }, - SlashAcks: []string{"slashAck1", "slashAck2"}, - InitChainHeight: uint64(123), - PendingVSCPackets: []types.ValidatorSetChangePacketData{{ValsetUpdateId: uint64(456)}}, - ProviderAddr: providertypes.NewProviderConsAddress([]byte("provider cons address")), - ConsumerKey: crypto.PublicKey{Sum: &crypto.PublicKey_Ed25519{Ed25519: []byte{4}}}, - ConsumerAddr: providertypes.NewConsumerConsAddress([]byte("consumer cons address")), - EquivocationMinHeight: uint64(789), - ConsensusValidator: providertypes.ConsensusValidator{}, - ConsumerRewardsAllocation: providertypes.ConsumerRewardsAllocation{Rewards: sdk.NewDecCoins(sdk.NewDecCoin("uatom", math.NewInt(1000)))}, - ConsumerCommissionRate: math.LegacyNewDec(1), - MinimumPowerInTopN: int64(123456789), - PruneTs: time.Now().UTC(), - TopN: uint32(67), - ValidatorsPowerCap: uint32(30), - ValidatorSetCap: uint32(100), + SlashAcks: []string{"slashAck1", "slashAck2"}, + InitChainHeight: uint64(123), + PendingVSCPackets: []types.ValidatorSetChangePacketData{{ValsetUpdateId: uint64(456)}}, + ProviderAddr: providertypes.NewProviderConsAddress([]byte("provider cons address")), + ConsumerKey: crypto.PublicKey{Sum: &crypto.PublicKey_Ed25519{Ed25519: []byte{4}}}, + ConsumerAddr: providertypes.NewConsumerConsAddress([]byte("consumer cons address")), + EquivocationMinHeight: uint64(789), + ConsensusValidator: providertypes.ConsensusValidator{}, + ConsumerCommissionRate: math.LegacyNewDec(1), + MinimumPowerInTopN: int64(123456789), + PruneTs: time.Now().UTC(), + TopN: uint32(67), + ValidatorsPowerCap: uint32(30), + ValidatorSetCap: uint32(100), } } diff --git a/x/ccv/provider/types/errors.go b/x/ccv/provider/types/errors.go index 11096a0acb..44ef35df15 100644 --- a/x/ccv/provider/types/errors.go +++ b/x/ccv/provider/types/errors.go @@ -39,4 +39,5 @@ var ( ErrInvalidMsgOptOut = errorsmod.Register(ModuleName, 50, "invalid opt out message") ErrInvalidMsgSetConsumerCommissionRate = errorsmod.Register(ModuleName, 51, "invalid set consumer commission rate message") ErrInvalidMsgChangeRewardDenoms = errorsmod.Register(ModuleName, 52, "invalid change reward denoms message") + ErrInvalidAllowlistedRewardDenoms = errorsmod.Register(ModuleName, 53, "invalid allowlisted reward denoms") ) diff --git a/x/ccv/provider/types/keys.go b/x/ccv/provider/types/keys.go index 683a0927d5..ca78611fd8 100644 --- a/x/ccv/provider/types/keys.go +++ b/x/ccv/provider/types/keys.go @@ -33,6 +33,10 @@ const ( // This address receives rewards from consumer chains ConsumerRewardsPool = "consumer_rewards_pool" + // MaxAllowlistedRewardDenomsPerChain corresponds to the maximum number of reward denoms + // a consumer chain can allowlist + MaxAllowlistedRewardDenomsPerChain = 3 + // Names for the store keys. // Used for storing the byte prefixes in the constant map. // See getKeyPrefixes(). @@ -115,7 +119,7 @@ const ( DenylistKeyName = "DenylistKey" - ConsumerRewardsAllocationKeyName = "ConsumerRewardsAllocationKey" + DeprecatedConsumerRewardsAllocationKeyName = "DeprecatedConsumerRewardsAllocationKey" ConsumerCommissionRateKeyName = "ConsumerCommissionRateKey" @@ -146,6 +150,10 @@ const ( RemovalTimeToConsumerIdsKeyName = "RemovalTimeToConsumerIdsKeyName" ClientIdToConsumerIdKeyName = "ClientIdToConsumerIdKey" + + ConsumerIdToAllowlistedRewardDenomKeyName = "ConsumerIdToAllowlistedRewardDenomKey" + + ConsumerRewardsAllocationByDenomKeyName = "ConsumerRewardsAllocationByDenomKey" ) // getKeyPrefixes returns a constant map of all the byte prefixes for existing keys @@ -323,7 +331,8 @@ func getKeyPrefixes() map[string]byte { // ConsumerRewardsAllocationKey is the key for storing for each consumer the ICS rewards // allocated to the consumer rewards pool - ConsumerRewardsAllocationKeyName: 38, + // [DEPRECATED] + DeprecatedConsumerRewardsAllocationKeyName: 38, // ConsumerCommissionRateKey is the key for storing the commission rate // per validator per consumer chain @@ -376,6 +385,12 @@ func getKeyPrefixes() map[string]byte { // ClientIdToConsumerIdKeyName is the key for storing the consumer id for the given client id ClientIdToConsumerIdKeyName: 53, + // ConsumerIdToAllowlistedRewardDenomKeyName is the key for storing the allowlisted reward denom for the given consumer id + ConsumerIdToAllowlistedRewardDenomKeyName: 54, + + // ConsumerRewardsAllocationByDenomKeyName is the key for storing the consumer rewards for a specific consumer chain and denom + ConsumerRewardsAllocationByDenomKeyName: 55, + // NOTE: DO NOT ADD NEW BYTE PREFIXES HERE WITHOUT ADDING THEM TO TestPreserveBytePrefix() IN keys_test.go } } @@ -592,11 +607,6 @@ func OptedInKey(consumerId string, providerAddr ProviderConsAddress) []byte { return StringIdAndConsAddrKey(OptedInKeyPrefix(), consumerId, providerAddr.ToSdkConsAddr()) } -// ConsumerRewardsAllocationKey returns the key used to store the ICS rewards per consumer chain -func ConsumerRewardsAllocationKey(consumerId string) []byte { - return append([]byte{mustGetKeyPrefix(ConsumerRewardsAllocationKeyName)}, []byte(consumerId)...) -} - // ConsumerCommissionRateKeyPrefix returns the key prefix for storing the commission rate per validator per consumer chain. func ConsumerCommissionRateKeyPrefix() byte { return mustGetKeyPrefix(ConsumerCommissionRateKeyName) @@ -754,6 +764,26 @@ func ClientIdToConsumerIdKey(clientId string) []byte { ) } +// ConsumerIdToAllowlistedRewardDenomKeyPrefix returns the key prefix for storing the allowlisted reward denom that corresponds to this consumer id +func ConsumerIdToAllowlistedRewardDenomKeyPrefix() byte { + return mustGetKeyPrefix(ConsumerIdToAllowlistedRewardDenomKeyName) +} + +// ConsumerIdToAllowlistedRewardDenomKey returns the key used to store the allowlisted reward denom that corresponds to this consumer id +func ConsumerIdToAllowlistedRewardDenomKey(consumerId string) []byte { + return StringIdWithLenKey(ConsumerIdToAllowlistedRewardDenomKeyPrefix(), consumerId) +} + +// ConsumerRewardsAllocationByDenomKeyPrefix returns the key prefix for storing the allowlisted reward denom that corresponds to this consumer id +func ConsumerRewardsAllocationByDenomKeyPrefix() byte { + return mustGetKeyPrefix(ConsumerRewardsAllocationByDenomKeyName) +} + +// ConsumerRewardsAllocationByDenomKey returns the key used to store the ICS rewards per consumer chain +func ConsumerRewardsAllocationByDenomKey(consumerId string, denom string) []byte { + return append(StringIdWithLenKey(ConsumerRewardsAllocationByDenomKeyPrefix(), consumerId), []byte(denom)...) +} + // NOTE: DO NOT ADD FULLY DEFINED KEY FUNCTIONS WITHOUT ADDING THEM TO getAllFullyDefinedKeys() IN keys_test.go // diff --git a/x/ccv/provider/types/keys_test.go b/x/ccv/provider/types/keys_test.go index 5046f231e8..814ece665a 100644 --- a/x/ccv/provider/types/keys_test.go +++ b/x/ccv/provider/types/keys_test.go @@ -110,7 +110,8 @@ func TestPreserveBytePrefix(t *testing.T) { i++ require.Equal(t, byte(37), providertypes.DenylistKeyPrefix()) i++ - require.Equal(t, byte(38), providertypes.ConsumerRewardsAllocationKey("13")[0]) + // DEPRECATED + //require.Equal(t, byte(38), providertypes.ConsumerRewardsAllocationKey("13")[0]) i++ require.Equal(t, byte(39), providertypes.ConsumerCommissionRateKeyPrefix()) i++ @@ -142,6 +143,10 @@ func TestPreserveBytePrefix(t *testing.T) { i++ require.Equal(t, byte(53), providertypes.ClientIdToConsumerIdKey("clientId")[0]) i++ + require.Equal(t, byte(54), providertypes.ConsumerIdToAllowlistedRewardDenomKey("13")[0]) + i++ + require.Equal(t, byte(55), providertypes.ConsumerRewardsAllocationByDenomKey("13", "denom")[0]) + i++ prefixes := providertypes.GetAllKeyPrefixes() require.Equal(t, len(prefixes), i) @@ -194,7 +199,6 @@ func getAllFullyDefinedKeys() [][]byte { providertypes.AllowlistKey("13", providertypes.NewProviderConsAddress([]byte{0x05})), providertypes.DenylistKey("13", providertypes.NewProviderConsAddress([]byte{0x05})), providertypes.OptedInKey("13", providertypes.NewProviderConsAddress([]byte{0x05})), - providertypes.ConsumerRewardsAllocationKey("13"), providertypes.ConsumerCommissionRateKey("13", providertypes.NewProviderConsAddress([]byte{0x05})), providertypes.MinimumPowerInTopNKey("13"), providertypes.ConsumerAddrsToPruneV2Key("13", time.Time{}), @@ -210,6 +214,8 @@ func getAllFullyDefinedKeys() [][]byte { providertypes.SpawnTimeToConsumerIdsKey(time.Time{}), providertypes.RemovalTimeToConsumerIdsKey(time.Time{}), providertypes.ClientIdToConsumerIdKey("clientId"), + providertypes.ConsumerIdToAllowlistedRewardDenomKey("13"), + providertypes.ConsumerRewardsAllocationByDenomKey("13", "denom"), } } diff --git a/x/ccv/provider/types/provider.pb.go b/x/ccv/provider/types/provider.pb.go index 10cdbdd9c9..73f48bc24a 100644 --- a/x/ccv/provider/types/provider.pb.go +++ b/x/ccv/provider/types/provider.pb.go @@ -1806,6 +1806,51 @@ func (m *ConsumerIds) GetIds() []string { return nil } +// AllowlistedRewardDenoms corresponds to the denoms allowlisted by a specific consumer id +type AllowlistedRewardDenoms struct { + Denoms []string `protobuf:"bytes,1,rep,name=denoms,proto3" json:"denoms,omitempty"` +} + +func (m *AllowlistedRewardDenoms) Reset() { *m = AllowlistedRewardDenoms{} } +func (m *AllowlistedRewardDenoms) String() string { return proto.CompactTextString(m) } +func (*AllowlistedRewardDenoms) ProtoMessage() {} +func (*AllowlistedRewardDenoms) Descriptor() ([]byte, []int) { + return fileDescriptor_f22ec409a72b7b72, []int{23} +} +func (m *AllowlistedRewardDenoms) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AllowlistedRewardDenoms) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AllowlistedRewardDenoms.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *AllowlistedRewardDenoms) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllowlistedRewardDenoms.Merge(m, src) +} +func (m *AllowlistedRewardDenoms) XXX_Size() int { + return m.Size() +} +func (m *AllowlistedRewardDenoms) XXX_DiscardUnknown() { + xxx_messageInfo_AllowlistedRewardDenoms.DiscardUnknown(m) +} + +var xxx_messageInfo_AllowlistedRewardDenoms proto.InternalMessageInfo + +func (m *AllowlistedRewardDenoms) GetDenoms() []string { + if m != nil { + return m.Denoms + } + return nil +} + func init() { proto.RegisterEnum("interchain_security.ccv.provider.v1.ConsumerPhase", ConsumerPhase_name, ConsumerPhase_value) proto.RegisterType((*ConsumerAdditionProposal)(nil), "interchain_security.ccv.provider.v1.ConsumerAdditionProposal") @@ -1831,6 +1876,7 @@ func init() { proto.RegisterType((*ConsumerInitializationParameters)(nil), "interchain_security.ccv.provider.v1.ConsumerInitializationParameters") proto.RegisterType((*PowerShapingParameters)(nil), "interchain_security.ccv.provider.v1.PowerShapingParameters") proto.RegisterType((*ConsumerIds)(nil), "interchain_security.ccv.provider.v1.ConsumerIds") + proto.RegisterType((*AllowlistedRewardDenoms)(nil), "interchain_security.ccv.provider.v1.AllowlistedRewardDenoms") } func init() { @@ -1838,148 +1884,149 @@ func init() { } var fileDescriptor_f22ec409a72b7b72 = []byte{ - // 2249 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0x1b, 0xb9, - 0xd9, 0xf7, 0x58, 0xb2, 0x2d, 0x51, 0xfe, 0x90, 0x99, 0x6c, 0x32, 0x76, 0xbc, 0x92, 0xa2, 0x7d, - 0xb3, 0xd0, 0x9b, 0x34, 0xd2, 0xda, 0x0b, 0x14, 0x41, 0xda, 0x45, 0xa0, 0x48, 0x4a, 0xa2, 0x7c, - 0x38, 0xea, 0x48, 0xf1, 0x02, 0xe9, 0x61, 0x40, 0xcd, 0xd0, 0x12, 0xeb, 0x99, 0xe1, 0x64, 0x48, - 0x4d, 0xa2, 0x1e, 0x7a, 0x5e, 0x14, 0x28, 0xb0, 0xed, 0x69, 0xd1, 0x4b, 0x17, 0xe8, 0xa5, 0xe8, - 0xa9, 0x87, 0xa2, 0x7f, 0x40, 0x4f, 0xdb, 0x02, 0x05, 0xb6, 0xb7, 0x9e, 0x76, 0x8b, 0xe4, 0xd0, - 0x43, 0x81, 0xf6, 0xdc, 0x5b, 0x41, 0xce, 0x87, 0x46, 0xfe, 0x8a, 0x82, 0x38, 0xbd, 0xd8, 0xc3, - 0xe7, 0xf9, 0x3d, 0x0f, 0x1f, 0x92, 0xcf, 0x17, 0x29, 0xb0, 0x43, 0x1c, 0x8e, 0x3d, 0x63, 0x88, - 0x88, 0xa3, 0x33, 0x6c, 0x8c, 0x3c, 0xc2, 0xc7, 0x35, 0xc3, 0xf0, 0x6b, 0xae, 0x47, 0x7d, 0x62, - 0x62, 0xaf, 0xe6, 0x6f, 0xc7, 0xdf, 0x55, 0xd7, 0xa3, 0x9c, 0xc2, 0x0f, 0x8e, 0x91, 0xa9, 0x1a, - 0x86, 0x5f, 0x8d, 0x71, 0xfe, 0xf6, 0xe6, 0x95, 0x93, 0x14, 0xfb, 0xdb, 0xb5, 0xe7, 0xc4, 0xc3, - 0x81, 0xae, 0xcd, 0xf3, 0x03, 0x3a, 0xa0, 0xf2, 0xb3, 0x26, 0xbe, 0x42, 0x6a, 0x71, 0x40, 0xe9, - 0xc0, 0xc2, 0x35, 0x39, 0xea, 0x8f, 0xf6, 0x6b, 0x9c, 0xd8, 0x98, 0x71, 0x64, 0xbb, 0x21, 0xa0, - 0x70, 0x18, 0x60, 0x8e, 0x3c, 0xc4, 0x09, 0x75, 0x22, 0x05, 0xa4, 0x6f, 0xd4, 0x0c, 0xea, 0xe1, - 0x9a, 0x61, 0x11, 0xec, 0x70, 0x31, 0x6b, 0xf0, 0x15, 0x02, 0x6a, 0x02, 0x60, 0x91, 0xc1, 0x90, - 0x07, 0x64, 0x56, 0xe3, 0xd8, 0x31, 0xb1, 0x67, 0x93, 0x00, 0x3c, 0x19, 0x85, 0x02, 0x5b, 0x09, - 0xbe, 0xe1, 0x8d, 0x5d, 0x4e, 0x6b, 0x07, 0x78, 0xcc, 0x42, 0xee, 0x87, 0x06, 0x65, 0x36, 0x65, - 0x35, 0x2c, 0xd6, 0xef, 0x18, 0xb8, 0xe6, 0x6f, 0xf7, 0x31, 0x47, 0xdb, 0x31, 0x21, 0xb2, 0x3b, - 0xc4, 0xf5, 0x11, 0x9b, 0x60, 0x0c, 0x4a, 0x22, 0xbb, 0x37, 0x02, 0xbe, 0x1e, 0xec, 0x48, 0x30, - 0x08, 0x59, 0xeb, 0xc8, 0x26, 0x0e, 0xad, 0xc9, 0xbf, 0x01, 0xa9, 0xfc, 0x9f, 0x0c, 0x50, 0x1b, - 0xd4, 0x61, 0x23, 0x1b, 0x7b, 0x75, 0xd3, 0x24, 0x62, 0x03, 0x3a, 0x1e, 0x75, 0x29, 0x43, 0x16, - 0x3c, 0x0f, 0x16, 0x38, 0xe1, 0x16, 0x56, 0x95, 0x92, 0x52, 0xc9, 0x6a, 0xc1, 0x00, 0x96, 0x40, - 0xce, 0xc4, 0xcc, 0xf0, 0x88, 0x2b, 0xc0, 0xea, 0xbc, 0xe4, 0x25, 0x49, 0x70, 0x03, 0x64, 0x82, - 0x53, 0x23, 0xa6, 0x9a, 0x92, 0xec, 0x25, 0x39, 0x6e, 0x9b, 0xf0, 0x2e, 0x58, 0x25, 0x0e, 0xe1, - 0x04, 0x59, 0xfa, 0x10, 0x8b, 0xbd, 0x53, 0xd3, 0x25, 0xa5, 0x92, 0xdb, 0xd9, 0xac, 0x92, 0xbe, - 0x51, 0x15, 0xdb, 0x5d, 0x0d, 0x37, 0xd9, 0xdf, 0xae, 0xde, 0x93, 0x88, 0xdb, 0xe9, 0xaf, 0xbe, - 0x29, 0xce, 0x69, 0x2b, 0xa1, 0x5c, 0x40, 0x84, 0x97, 0xc1, 0xf2, 0x00, 0x3b, 0x98, 0x11, 0xa6, - 0x0f, 0x11, 0x1b, 0xaa, 0x0b, 0x25, 0xa5, 0xb2, 0xac, 0xe5, 0x42, 0xda, 0x3d, 0xc4, 0x86, 0xb0, - 0x08, 0x72, 0x7d, 0xe2, 0x20, 0x6f, 0x1c, 0x20, 0x16, 0x25, 0x02, 0x04, 0x24, 0x09, 0x68, 0x00, - 0xc0, 0x5c, 0xf4, 0xdc, 0xd1, 0x85, 0x6f, 0xa8, 0x4b, 0xa1, 0x21, 0x81, 0x5f, 0x54, 0x23, 0xbf, - 0xa8, 0xf6, 0x22, 0xc7, 0xb9, 0x9d, 0x11, 0x86, 0x7c, 0xfe, 0x6d, 0x51, 0xd1, 0xb2, 0x52, 0x4e, - 0x70, 0xe0, 0x2e, 0xc8, 0x8f, 0x9c, 0x3e, 0x75, 0x4c, 0xe2, 0x0c, 0x74, 0x17, 0x7b, 0x84, 0x9a, - 0x6a, 0x46, 0xaa, 0xda, 0x38, 0xa2, 0xaa, 0x19, 0xba, 0x58, 0xa0, 0xe9, 0x0b, 0xa1, 0x69, 0x2d, - 0x16, 0xee, 0x48, 0x59, 0xf8, 0x03, 0x00, 0x0d, 0xc3, 0x97, 0x26, 0xd1, 0x11, 0x8f, 0x34, 0x66, - 0x67, 0xd7, 0x98, 0x37, 0x0c, 0xbf, 0x17, 0x48, 0x87, 0x2a, 0x7f, 0x08, 0x2e, 0x72, 0x0f, 0x39, - 0x6c, 0x1f, 0x7b, 0x87, 0xf5, 0x82, 0xd9, 0xf5, 0xbe, 0x17, 0xe9, 0x98, 0x56, 0x7e, 0x0f, 0x94, - 0x8c, 0xd0, 0x81, 0x74, 0x0f, 0x9b, 0x84, 0x71, 0x8f, 0xf4, 0x47, 0x42, 0x56, 0xdf, 0xf7, 0x90, - 0x21, 0x7d, 0x24, 0x27, 0x9d, 0xa0, 0x10, 0xe1, 0xb4, 0x29, 0xd8, 0x9d, 0x10, 0x05, 0x1f, 0x83, - 0xff, 0xeb, 0x5b, 0xd4, 0x38, 0x60, 0xc2, 0x38, 0x7d, 0x4a, 0x93, 0x9c, 0xda, 0x26, 0x8c, 0x09, - 0x6d, 0xcb, 0x25, 0xa5, 0x92, 0xd2, 0x2e, 0x07, 0xd8, 0x0e, 0xf6, 0x9a, 0x09, 0x64, 0x2f, 0x01, - 0x84, 0xd7, 0x01, 0x1c, 0x12, 0xc6, 0xa9, 0x47, 0x0c, 0x64, 0xe9, 0xd8, 0xe1, 0x1e, 0xc1, 0x4c, - 0x5d, 0x91, 0xe2, 0xeb, 0x13, 0x4e, 0x2b, 0x60, 0xc0, 0xfb, 0xe0, 0xf2, 0x89, 0x93, 0xea, 0xc6, - 0x10, 0x39, 0x0e, 0xb6, 0xd4, 0x55, 0xb9, 0x94, 0xa2, 0x79, 0xc2, 0x9c, 0x8d, 0x00, 0x06, 0xcf, - 0x81, 0x05, 0x4e, 0x5d, 0x7d, 0x57, 0x5d, 0x2b, 0x29, 0x95, 0x15, 0x2d, 0xcd, 0xa9, 0xbb, 0x0b, - 0x3f, 0x02, 0xe7, 0x7d, 0x64, 0x11, 0x13, 0x71, 0xea, 0x31, 0xdd, 0xa5, 0xcf, 0xb1, 0xa7, 0x1b, - 0xc8, 0x55, 0xf3, 0x12, 0x03, 0x27, 0xbc, 0x8e, 0x60, 0x35, 0x90, 0x0b, 0xaf, 0x82, 0xf5, 0x98, - 0xaa, 0x33, 0xcc, 0x25, 0x7c, 0x5d, 0xc2, 0xd7, 0x62, 0x46, 0x17, 0x73, 0x81, 0xdd, 0x02, 0x59, - 0x64, 0x59, 0xf4, 0xb9, 0x45, 0x18, 0x57, 0x61, 0x29, 0x55, 0xc9, 0x6a, 0x13, 0x02, 0xdc, 0x04, - 0x19, 0x13, 0x3b, 0x63, 0xc9, 0x3c, 0x27, 0x99, 0xf1, 0x18, 0x5e, 0x02, 0x59, 0x5b, 0xe4, 0x58, - 0x8e, 0x0e, 0xb0, 0x7a, 0xbe, 0xa4, 0x54, 0xd2, 0x5a, 0xc6, 0x26, 0x4e, 0x57, 0x8c, 0x61, 0x15, - 0x9c, 0x93, 0x5a, 0x74, 0xe2, 0x88, 0x73, 0xf2, 0xb1, 0xee, 0x23, 0x8b, 0xa9, 0xef, 0x95, 0x94, - 0x4a, 0x46, 0x5b, 0x97, 0xac, 0x76, 0xc8, 0xd9, 0x43, 0x16, 0xbb, 0x59, 0xf9, 0xec, 0xcb, 0xe2, - 0xdc, 0x17, 0x5f, 0x16, 0xe7, 0xfe, 0xfc, 0xfb, 0xeb, 0x9b, 0x61, 0xfa, 0x19, 0x50, 0xbf, 0x1a, - 0xa6, 0xaa, 0x6a, 0x83, 0x3a, 0x1c, 0x3b, 0x5c, 0x55, 0xca, 0x7f, 0x55, 0xc0, 0xc5, 0x46, 0xec, - 0x12, 0x36, 0xf5, 0x91, 0xf5, 0x2e, 0x53, 0x4f, 0x1d, 0x64, 0x99, 0x38, 0x13, 0x19, 0xec, 0xe9, - 0x37, 0x08, 0xf6, 0x8c, 0x10, 0x13, 0x8c, 0x9b, 0xa5, 0xd7, 0xae, 0xe9, 0xdf, 0xf3, 0x60, 0x2b, - 0x5a, 0xd3, 0x23, 0x6a, 0x92, 0x7d, 0x62, 0xa0, 0x77, 0x9d, 0x53, 0x63, 0x5f, 0x4b, 0xcf, 0xe0, - 0x6b, 0x0b, 0x6f, 0xe6, 0x6b, 0x8b, 0x33, 0xf8, 0xda, 0xd2, 0x69, 0xbe, 0x96, 0x39, 0xcd, 0xd7, - 0xb2, 0xb3, 0xf9, 0x1a, 0x38, 0xc9, 0xd7, 0xe6, 0x55, 0xa5, 0xfc, 0x2b, 0x05, 0x9c, 0x6f, 0x3d, - 0x1b, 0x11, 0x9f, 0x9e, 0xd1, 0x4e, 0x3f, 0x00, 0x2b, 0x38, 0xa1, 0x8f, 0xa9, 0xa9, 0x52, 0xaa, - 0x92, 0xdb, 0xb9, 0x52, 0x0d, 0x0f, 0x3e, 0xae, 0xc7, 0xd1, 0xe9, 0x27, 0x67, 0xd7, 0xa6, 0x65, - 0xa5, 0x85, 0x7f, 0x54, 0xc0, 0xa6, 0xc8, 0x0b, 0x03, 0xac, 0xe1, 0xe7, 0xc8, 0x33, 0x9b, 0xd8, - 0xa1, 0x36, 0x7b, 0x6b, 0x3b, 0xcb, 0x60, 0xc5, 0x94, 0x9a, 0x74, 0x4e, 0x75, 0x64, 0x9a, 0xd2, - 0x4e, 0x89, 0x11, 0xc4, 0x1e, 0xad, 0x9b, 0x26, 0xac, 0x80, 0xfc, 0x04, 0xe3, 0x89, 0x18, 0x13, - 0xae, 0x2f, 0x60, 0xab, 0x11, 0x4c, 0x46, 0x1e, 0xbe, 0x59, 0x38, 0xdd, 0xb5, 0xcb, 0xff, 0x54, - 0x40, 0xfe, 0xae, 0x45, 0xfb, 0xc8, 0xea, 0x5a, 0x88, 0x0d, 0x45, 0xce, 0x1c, 0x8b, 0x90, 0xf2, - 0x70, 0x58, 0xac, 0xa4, 0xf9, 0x33, 0x87, 0x94, 0x10, 0x93, 0xe5, 0xf3, 0x16, 0x58, 0x8f, 0xcb, - 0x47, 0xec, 0xe0, 0x72, 0xb5, 0xb7, 0xcf, 0xbd, 0xfc, 0xa6, 0xb8, 0x16, 0x05, 0x53, 0x43, 0x3a, - 0x7b, 0x53, 0x5b, 0x33, 0xa6, 0x08, 0x26, 0x2c, 0x80, 0x1c, 0xe9, 0x1b, 0x3a, 0xc3, 0xcf, 0x74, - 0x67, 0x64, 0xcb, 0xd8, 0x48, 0x6b, 0x59, 0xd2, 0x37, 0xba, 0xf8, 0xd9, 0xee, 0xc8, 0x86, 0x1f, - 0x83, 0x0b, 0x51, 0x53, 0x29, 0xbc, 0x49, 0x17, 0xf2, 0x62, 0xbb, 0x3c, 0x19, 0x2e, 0xcb, 0xda, - 0xb9, 0x88, 0xbb, 0x87, 0x2c, 0x31, 0x59, 0xdd, 0x34, 0xbd, 0xf2, 0xbf, 0x16, 0xc0, 0x62, 0x07, - 0x79, 0xc8, 0x66, 0xb0, 0x07, 0xd6, 0x38, 0xb6, 0x5d, 0x0b, 0x71, 0xac, 0x07, 0xad, 0x49, 0xb8, - 0xd2, 0x6b, 0xb2, 0x65, 0x49, 0x36, 0x80, 0xd5, 0x44, 0xcb, 0xe7, 0x6f, 0x57, 0x1b, 0x92, 0xda, - 0xe5, 0x88, 0x63, 0x6d, 0x35, 0xd2, 0x11, 0x10, 0xe1, 0x0d, 0xa0, 0x72, 0x6f, 0xc4, 0xf8, 0xa4, - 0x69, 0x98, 0x54, 0xcb, 0xe0, 0xac, 0x2f, 0x44, 0xfc, 0xa0, 0xce, 0xc6, 0x55, 0xf2, 0xf8, 0xfe, - 0x20, 0xf5, 0x36, 0xfd, 0x81, 0x09, 0xb6, 0x98, 0x38, 0x54, 0xdd, 0xc6, 0x5c, 0x56, 0x71, 0xd7, - 0xc2, 0x0e, 0x61, 0xc3, 0x48, 0xf9, 0xe2, 0xec, 0xca, 0x37, 0xa4, 0xa2, 0x47, 0x42, 0x8f, 0x16, - 0xa9, 0x09, 0x67, 0x69, 0x80, 0xc2, 0xf1, 0xb3, 0xc4, 0x0b, 0x5f, 0x92, 0x0b, 0xbf, 0x74, 0x8c, - 0x8a, 0x78, 0xf5, 0x0c, 0x7c, 0x98, 0xe8, 0x36, 0x44, 0x34, 0xe9, 0xd2, 0x91, 0x75, 0x0f, 0x0f, - 0x44, 0x49, 0x46, 0x41, 0xe3, 0x81, 0x71, 0xdc, 0x31, 0x85, 0x3e, 0x2d, 0xda, 0xe5, 0x84, 0x53, - 0x13, 0x27, 0x6c, 0x2b, 0xcb, 0x93, 0xa6, 0x24, 0x8e, 0x4d, 0x2d, 0xa1, 0xeb, 0x0e, 0xc6, 0x22, - 0x8a, 0x12, 0x8d, 0x09, 0x76, 0xa9, 0x31, 0x94, 0x39, 0x29, 0xa5, 0xad, 0xc6, 0x4d, 0x48, 0x4b, - 0x50, 0xe1, 0x53, 0x70, 0xcd, 0x19, 0xd9, 0x7d, 0xec, 0xe9, 0x74, 0x3f, 0x00, 0xca, 0xc8, 0x63, - 0x1c, 0x79, 0x5c, 0xf7, 0xb0, 0x81, 0x89, 0x2f, 0x4e, 0x3c, 0xb0, 0x9c, 0xc9, 0xbe, 0x28, 0xa5, - 0x5d, 0x09, 0x44, 0x1e, 0xef, 0x4b, 0x1d, 0xac, 0x47, 0xbb, 0x02, 0xae, 0x45, 0xe8, 0xc0, 0x30, - 0x06, 0xdb, 0xe0, 0xb2, 0x8d, 0x5e, 0xe8, 0xb1, 0x33, 0x0b, 0xc3, 0xb1, 0xc3, 0x46, 0x4c, 0x9f, - 0x24, 0xf3, 0xb0, 0x37, 0x2a, 0xd8, 0xe8, 0x45, 0x27, 0xc4, 0x35, 0x22, 0xd8, 0x5e, 0x8c, 0xba, - 0x9f, 0xce, 0xa4, 0xf3, 0x0b, 0xf7, 0xd3, 0x99, 0x85, 0xfc, 0xe2, 0xfd, 0x74, 0x26, 0x93, 0xcf, - 0x96, 0xff, 0x1f, 0x64, 0x65, 0x5c, 0xd7, 0x8d, 0x03, 0x26, 0xb3, 0xbb, 0x69, 0x7a, 0x98, 0x31, - 0xcc, 0x54, 0x25, 0xcc, 0xee, 0x11, 0xa1, 0xcc, 0xc1, 0xc6, 0x49, 0x37, 0x06, 0x06, 0x3f, 0x05, - 0x4b, 0x2e, 0x96, 0xed, 0xac, 0x14, 0xcc, 0xed, 0x7c, 0x52, 0x9d, 0xe1, 0xaa, 0x57, 0x3d, 0x49, - 0xa1, 0x16, 0x69, 0x2b, 0x7b, 0x93, 0x7b, 0xca, 0xa1, 0x5e, 0x81, 0xc1, 0xbd, 0xc3, 0x93, 0x7e, - 0xff, 0x8d, 0x26, 0x3d, 0xa4, 0x6f, 0x32, 0xe7, 0x35, 0x90, 0xab, 0x07, 0xcb, 0x7e, 0x28, 0x4a, - 0xd7, 0x91, 0x6d, 0x59, 0x4e, 0x6e, 0xcb, 0x2e, 0x58, 0x0d, 0x9b, 0xbf, 0x1e, 0x95, 0xb9, 0x09, - 0xbe, 0x0f, 0x40, 0xd8, 0x35, 0x8a, 0x9c, 0x16, 0x64, 0xf7, 0x6c, 0x48, 0x69, 0x9b, 0x53, 0x15, - 0x7d, 0x7e, 0xaa, 0xa2, 0xcb, 0xaa, 0x41, 0xc1, 0xc6, 0x5e, 0xb2, 0xea, 0xca, 0x02, 0xd2, 0x41, - 0xc6, 0x01, 0xe6, 0x0c, 0x6a, 0x20, 0x2d, 0xab, 0x6b, 0xb0, 0xdc, 0x1b, 0x27, 0x2e, 0xd7, 0xdf, - 0xae, 0x9e, 0xa4, 0xa4, 0x89, 0x38, 0x0a, 0x63, 0x40, 0xea, 0x2a, 0xff, 0x5c, 0x01, 0xea, 0x03, - 0x3c, 0xae, 0x33, 0x46, 0x06, 0x8e, 0x8d, 0x1d, 0x2e, 0xa2, 0x0f, 0x19, 0x58, 0x7c, 0xc2, 0x0f, - 0xc0, 0x4a, 0xec, 0x78, 0x32, 0x79, 0x2a, 0x32, 0x79, 0x2e, 0x47, 0x44, 0xb1, 0x4f, 0xf0, 0x26, - 0x00, 0xae, 0x87, 0x7d, 0xdd, 0xd0, 0x0f, 0xf0, 0x58, 0xae, 0x29, 0xb7, 0xb3, 0x95, 0x4c, 0x8a, - 0xc1, 0xad, 0xb7, 0xda, 0x19, 0xf5, 0x2d, 0x62, 0x3c, 0xc0, 0x63, 0x2d, 0x23, 0xf0, 0x8d, 0x07, - 0x78, 0x2c, 0xaa, 0xa0, 0x6c, 0x52, 0x64, 0x26, 0x4b, 0x69, 0xc1, 0xa0, 0xfc, 0x4b, 0x05, 0x5c, - 0x8c, 0x17, 0x10, 0x9d, 0x57, 0x67, 0xd4, 0x17, 0x12, 0xc9, 0xfd, 0x53, 0xa6, 0x3b, 0xa2, 0x23, - 0xd6, 0xce, 0x1f, 0x63, 0xed, 0x2d, 0xb0, 0x1c, 0xa7, 0x12, 0x61, 0x6f, 0x6a, 0x06, 0x7b, 0x73, - 0x91, 0xc4, 0x03, 0x3c, 0x2e, 0xff, 0x24, 0x61, 0xdb, 0xed, 0x71, 0xc2, 0x85, 0xbd, 0xd7, 0xd8, - 0x16, 0x4f, 0x9b, 0xb4, 0xcd, 0x48, 0xca, 0x1f, 0x59, 0x40, 0xea, 0xe8, 0x02, 0xca, 0x7f, 0x51, - 0xc0, 0x85, 0xe4, 0xac, 0xac, 0x47, 0x3b, 0xde, 0xc8, 0xc1, 0x7b, 0x3b, 0xa7, 0xcd, 0x7f, 0x0b, - 0x64, 0x5c, 0x81, 0xd2, 0x39, 0x0b, 0x8f, 0x68, 0xb6, 0x92, 0xbd, 0x24, 0xa5, 0x7a, 0x22, 0xc4, - 0x57, 0xa7, 0x16, 0xc0, 0xc2, 0x9d, 0xfb, 0x68, 0xa6, 0xa0, 0x4b, 0x04, 0x94, 0xb6, 0x92, 0x5c, - 0x33, 0x2b, 0xff, 0x41, 0x01, 0xf0, 0x68, 0xb6, 0x82, 0xdf, 0x01, 0x70, 0x2a, 0xe7, 0x25, 0xfd, - 0x2f, 0xef, 0x26, 0xb2, 0x9c, 0xdc, 0xb9, 0xd8, 0x8f, 0xe6, 0x13, 0x7e, 0x04, 0xbf, 0x07, 0x80, - 0x2b, 0x0f, 0x71, 0xe6, 0x93, 0xce, 0xba, 0xd1, 0x27, 0x2c, 0x82, 0xdc, 0x8f, 0x28, 0x71, 0x92, - 0x0f, 0x16, 0x29, 0x0d, 0x08, 0x52, 0xf0, 0x16, 0x51, 0xfe, 0x99, 0x32, 0x49, 0x89, 0x61, 0xb6, - 0xae, 0x5b, 0x56, 0xd8, 0x03, 0x42, 0x17, 0x2c, 0x45, 0xf9, 0x3e, 0x08, 0xd7, 0xad, 0x63, 0x6b, - 0x52, 0x13, 0x1b, 0xb2, 0x2c, 0xdd, 0x10, 0x3b, 0xfe, 0xdb, 0x6f, 0x8b, 0xd7, 0x06, 0x84, 0x0f, - 0x47, 0xfd, 0xaa, 0x41, 0xed, 0xf0, 0x15, 0x27, 0xfc, 0x77, 0x9d, 0x99, 0x07, 0x35, 0x3e, 0x76, - 0x31, 0x8b, 0x64, 0xd8, 0x6f, 0xfe, 0xf1, 0xbb, 0xab, 0x8a, 0x16, 0x4d, 0x53, 0x36, 0x41, 0x3e, - 0xbe, 0x83, 0x60, 0x8e, 0x4c, 0xc4, 0x11, 0x84, 0x20, 0xed, 0x20, 0x3b, 0x6a, 0x32, 0xe5, 0xf7, - 0x0c, 0x3d, 0xe6, 0x26, 0xc8, 0xd8, 0xa1, 0x86, 0xf0, 0xd6, 0x11, 0x8f, 0xcb, 0x3f, 0x5d, 0x04, - 0xa5, 0x68, 0x9a, 0x76, 0xf0, 0x36, 0x43, 0x7e, 0x1c, 0xb4, 0xe0, 0xa2, 0x73, 0x12, 0xf5, 0x9b, - 0x1d, 0xf3, 0xde, 0xa3, 0x9c, 0xcd, 0x7b, 0xcf, 0xfc, 0x6b, 0xdf, 0x7b, 0x52, 0xaf, 0x79, 0xef, - 0x49, 0x9f, 0xdd, 0x7b, 0xcf, 0xc2, 0x99, 0xbf, 0xf7, 0x2c, 0xbe, 0xa3, 0xf7, 0x9e, 0xa5, 0xff, - 0xc9, 0x7b, 0x4f, 0xe6, 0x4c, 0xdf, 0x7b, 0xb2, 0x6f, 0xf7, 0xde, 0x03, 0xde, 0xea, 0xbd, 0x27, - 0x37, 0xd3, 0x7b, 0x4f, 0xf9, 0x17, 0xf3, 0xe0, 0x82, 0xbc, 0x49, 0x77, 0x87, 0xc8, 0x15, 0x87, - 0x3b, 0x09, 0x81, 0xf8, 0x7a, 0xae, 0xcc, 0x70, 0x3d, 0x9f, 0x7f, 0xb3, 0xeb, 0x79, 0x6a, 0x86, - 0xeb, 0x79, 0xfa, 0xb4, 0xeb, 0xf9, 0xc2, 0x69, 0xd7, 0xf3, 0xc5, 0xd9, 0xae, 0xe7, 0x4b, 0x27, - 0x5c, 0xcf, 0xcb, 0x45, 0x90, 0x8b, 0x13, 0x84, 0xc9, 0x60, 0x1e, 0xa4, 0x88, 0x19, 0x35, 0x94, - 0xe2, 0xf3, 0xea, 0x9f, 0x14, 0xb0, 0x12, 0x57, 0xf5, 0x21, 0x62, 0x18, 0x16, 0xc0, 0x66, 0xe3, - 0xf1, 0x6e, 0xf7, 0xc9, 0xa3, 0x96, 0xa6, 0x77, 0xee, 0xd5, 0xbb, 0x2d, 0xfd, 0xc9, 0x6e, 0xb7, - 0xd3, 0x6a, 0xb4, 0xef, 0xb4, 0x5b, 0xcd, 0xfc, 0x1c, 0x7c, 0x1f, 0x6c, 0x1c, 0xe2, 0x6b, 0xad, - 0xbb, 0xed, 0x6e, 0xaf, 0xa5, 0xb5, 0x9a, 0x79, 0xe5, 0x18, 0xf1, 0xf6, 0x6e, 0xbb, 0xd7, 0xae, - 0x3f, 0x6c, 0x3f, 0x6d, 0x35, 0xf3, 0xf3, 0xf0, 0x12, 0xb8, 0x78, 0x88, 0xff, 0xb0, 0xfe, 0x64, - 0xb7, 0x71, 0xaf, 0xd5, 0xcc, 0xa7, 0xe0, 0x26, 0xb8, 0x70, 0x88, 0xd9, 0xed, 0x3d, 0xee, 0x74, - 0x5a, 0xcd, 0x7c, 0xfa, 0x18, 0x5e, 0xb3, 0xf5, 0xb0, 0xd5, 0x6b, 0x35, 0xf3, 0x0b, 0x9b, 0xe9, - 0xcf, 0x7e, 0x5d, 0x98, 0xbb, 0xfd, 0xe9, 0x57, 0x2f, 0x0b, 0xca, 0xd7, 0x2f, 0x0b, 0xca, 0xdf, - 0x5f, 0x16, 0x94, 0xcf, 0x5f, 0x15, 0xe6, 0xbe, 0x7e, 0x55, 0x98, 0xfb, 0xdb, 0xab, 0xc2, 0xdc, - 0xd3, 0x4f, 0x8e, 0x66, 0xf2, 0x49, 0xa5, 0xbc, 0x1e, 0xff, 0xb2, 0xe1, 0x7f, 0xb7, 0xf6, 0x62, - 0xfa, 0x77, 0x13, 0x99, 0xe4, 0xfb, 0x8b, 0x32, 0x48, 0x3f, 0xfe, 0x6f, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x4a, 0x0f, 0x93, 0x6a, 0x68, 0x19, 0x00, 0x00, + // 2267 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcb, 0x6f, 0x1b, 0xc9, + 0xd1, 0xd7, 0x88, 0x94, 0x44, 0x16, 0xf5, 0xa0, 0xda, 0x5e, 0x99, 0x92, 0xb5, 0x24, 0xcd, 0xfd, + 0xbc, 0xe0, 0x67, 0xc7, 0xe4, 0x4a, 0x0b, 0x04, 0x86, 0x93, 0x85, 0x41, 0x93, 0xb4, 0x4d, 0x3f, + 0x64, 0x66, 0x48, 0x6b, 0x01, 0xe7, 0x30, 0x68, 0xce, 0xb4, 0xc8, 0x8e, 0xe6, 0xe5, 0xe9, 0x26, + 0x6d, 0xe6, 0x90, 0xf3, 0x22, 0x40, 0x80, 0x4d, 0x4e, 0x8b, 0x5c, 0xb2, 0x40, 0x2e, 0x41, 0x4e, + 0x39, 0x04, 0xf9, 0x03, 0x72, 0xda, 0x04, 0x08, 0xb0, 0xb9, 0xe5, 0xb4, 0x1b, 0xd8, 0x87, 0x1c, + 0x02, 0x24, 0xe7, 0xdc, 0x82, 0xee, 0x79, 0x70, 0xa8, 0x97, 0x69, 0xd8, 0xce, 0x45, 0x9a, 0xae, + 0xfa, 0x55, 0x75, 0x75, 0x77, 0xbd, 0xba, 0x09, 0xbb, 0xd4, 0xe6, 0xc4, 0xd3, 0x07, 0x98, 0xda, + 0x1a, 0x23, 0xfa, 0xd0, 0xa3, 0x7c, 0x5c, 0xd5, 0xf5, 0x51, 0xd5, 0xf5, 0x9c, 0x11, 0x35, 0x88, + 0x57, 0x1d, 0xed, 0x44, 0xdf, 0x15, 0xd7, 0x73, 0xb8, 0x83, 0x3e, 0x38, 0x41, 0xa6, 0xa2, 0xeb, + 0xa3, 0x4a, 0x84, 0x1b, 0xed, 0x6c, 0x5d, 0x3e, 0x4d, 0xf1, 0x68, 0xa7, 0xfa, 0x8c, 0x7a, 0xc4, + 0xd7, 0xb5, 0x75, 0xbe, 0xef, 0xf4, 0x1d, 0xf9, 0x59, 0x15, 0x5f, 0x01, 0xb5, 0xd0, 0x77, 0x9c, + 0xbe, 0x49, 0xaa, 0x72, 0xd4, 0x1b, 0x1e, 0x54, 0x39, 0xb5, 0x08, 0xe3, 0xd8, 0x72, 0x03, 0x40, + 0xfe, 0x28, 0xc0, 0x18, 0x7a, 0x98, 0x53, 0xc7, 0x0e, 0x15, 0xd0, 0x9e, 0x5e, 0xd5, 0x1d, 0x8f, + 0x54, 0x75, 0x93, 0x12, 0x9b, 0x8b, 0x59, 0xfd, 0xaf, 0x00, 0x50, 0x15, 0x00, 0x93, 0xf6, 0x07, + 0xdc, 0x27, 0xb3, 0x2a, 0x27, 0xb6, 0x41, 0x3c, 0x8b, 0xfa, 0xe0, 0xc9, 0x28, 0x10, 0xd8, 0x8e, + 0xf1, 0x75, 0x6f, 0xec, 0x72, 0xa7, 0x7a, 0x48, 0xc6, 0x2c, 0xe0, 0x7e, 0xa8, 0x3b, 0xcc, 0x72, + 0x58, 0x95, 0x88, 0xf5, 0xdb, 0x3a, 0xa9, 0x8e, 0x76, 0x7a, 0x84, 0xe3, 0x9d, 0x88, 0x10, 0xda, + 0x1d, 0xe0, 0x7a, 0x98, 0x4d, 0x30, 0xba, 0x43, 0x43, 0xbb, 0x37, 0x7d, 0xbe, 0xe6, 0xef, 0x88, + 0x3f, 0x08, 0x58, 0xeb, 0xd8, 0xa2, 0xb6, 0x53, 0x95, 0x7f, 0x7d, 0x52, 0xe9, 0x3f, 0x29, 0xc8, + 0xd5, 0x1d, 0x9b, 0x0d, 0x2d, 0xe2, 0xd5, 0x0c, 0x83, 0x8a, 0x0d, 0x68, 0x7b, 0x8e, 0xeb, 0x30, + 0x6c, 0xa2, 0xf3, 0xb0, 0xc0, 0x29, 0x37, 0x49, 0x4e, 0x29, 0x2a, 0xe5, 0xb4, 0xea, 0x0f, 0x50, + 0x11, 0x32, 0x06, 0x61, 0xba, 0x47, 0x5d, 0x01, 0xce, 0xcd, 0x4b, 0x5e, 0x9c, 0x84, 0x36, 0x21, + 0xe5, 0x9f, 0x1a, 0x35, 0x72, 0x09, 0xc9, 0x5e, 0x92, 0xe3, 0x96, 0x81, 0xee, 0xc0, 0x2a, 0xb5, + 0x29, 0xa7, 0xd8, 0xd4, 0x06, 0x44, 0xec, 0x5d, 0x2e, 0x59, 0x54, 0xca, 0x99, 0xdd, 0xad, 0x0a, + 0xed, 0xe9, 0x15, 0xb1, 0xdd, 0x95, 0x60, 0x93, 0x47, 0x3b, 0x95, 0xbb, 0x12, 0x71, 0x2b, 0xf9, + 0xd5, 0x37, 0x85, 0x39, 0x75, 0x25, 0x90, 0xf3, 0x89, 0xe8, 0x12, 0x2c, 0xf7, 0x89, 0x4d, 0x18, + 0x65, 0xda, 0x00, 0xb3, 0x41, 0x6e, 0xa1, 0xa8, 0x94, 0x97, 0xd5, 0x4c, 0x40, 0xbb, 0x8b, 0xd9, + 0x00, 0x15, 0x20, 0xd3, 0xa3, 0x36, 0xf6, 0xc6, 0x3e, 0x62, 0x51, 0x22, 0xc0, 0x27, 0x49, 0x40, + 0x1d, 0x80, 0xb9, 0xf8, 0x99, 0xad, 0x09, 0xdf, 0xc8, 0x2d, 0x05, 0x86, 0xf8, 0x7e, 0x51, 0x09, + 0xfd, 0xa2, 0xd2, 0x0d, 0x1d, 0xe7, 0x56, 0x4a, 0x18, 0xf2, 0xf9, 0xb7, 0x05, 0x45, 0x4d, 0x4b, + 0x39, 0xc1, 0x41, 0x7b, 0x90, 0x1d, 0xda, 0x3d, 0xc7, 0x36, 0xa8, 0xdd, 0xd7, 0x5c, 0xe2, 0x51, + 0xc7, 0xc8, 0xa5, 0xa4, 0xaa, 0xcd, 0x63, 0xaa, 0x1a, 0x81, 0x8b, 0xf9, 0x9a, 0xbe, 0x10, 0x9a, + 0xd6, 0x22, 0xe1, 0xb6, 0x94, 0x45, 0x3f, 0x00, 0xa4, 0xeb, 0x23, 0x69, 0x92, 0x33, 0xe4, 0xa1, + 0xc6, 0xf4, 0xec, 0x1a, 0xb3, 0xba, 0x3e, 0xea, 0xfa, 0xd2, 0x81, 0xca, 0x1f, 0xc2, 0x05, 0xee, + 0x61, 0x9b, 0x1d, 0x10, 0xef, 0xa8, 0x5e, 0x98, 0x5d, 0xef, 0x7b, 0xa1, 0x8e, 0x69, 0xe5, 0x77, + 0xa1, 0xa8, 0x07, 0x0e, 0xa4, 0x79, 0xc4, 0xa0, 0x8c, 0x7b, 0xb4, 0x37, 0x14, 0xb2, 0xda, 0x81, + 0x87, 0x75, 0xe9, 0x23, 0x19, 0xe9, 0x04, 0xf9, 0x10, 0xa7, 0x4e, 0xc1, 0x6e, 0x07, 0x28, 0xf4, + 0x08, 0xfe, 0xaf, 0x67, 0x3a, 0xfa, 0x21, 0x13, 0xc6, 0x69, 0x53, 0x9a, 0xe4, 0xd4, 0x16, 0x65, + 0x4c, 0x68, 0x5b, 0x2e, 0x2a, 0xe5, 0x84, 0x7a, 0xc9, 0xc7, 0xb6, 0x89, 0xd7, 0x88, 0x21, 0xbb, + 0x31, 0x20, 0xba, 0x06, 0x68, 0x40, 0x19, 0x77, 0x3c, 0xaa, 0x63, 0x53, 0x23, 0x36, 0xf7, 0x28, + 0x61, 0xb9, 0x15, 0x29, 0xbe, 0x3e, 0xe1, 0x34, 0x7d, 0x06, 0xba, 0x07, 0x97, 0x4e, 0x9d, 0x54, + 0xd3, 0x07, 0xd8, 0xb6, 0x89, 0x99, 0x5b, 0x95, 0x4b, 0x29, 0x18, 0xa7, 0xcc, 0x59, 0xf7, 0x61, + 0xe8, 0x1c, 0x2c, 0x70, 0xc7, 0xd5, 0xf6, 0x72, 0x6b, 0x45, 0xa5, 0xbc, 0xa2, 0x26, 0xb9, 0xe3, + 0xee, 0xa1, 0x8f, 0xe0, 0xfc, 0x08, 0x9b, 0xd4, 0xc0, 0xdc, 0xf1, 0x98, 0xe6, 0x3a, 0xcf, 0x88, + 0xa7, 0xe9, 0xd8, 0xcd, 0x65, 0x25, 0x06, 0x4d, 0x78, 0x6d, 0xc1, 0xaa, 0x63, 0x17, 0x5d, 0x81, + 0xf5, 0x88, 0xaa, 0x31, 0xc2, 0x25, 0x7c, 0x5d, 0xc2, 0xd7, 0x22, 0x46, 0x87, 0x70, 0x81, 0xdd, + 0x86, 0x34, 0x36, 0x4d, 0xe7, 0x99, 0x49, 0x19, 0xcf, 0xa1, 0x62, 0xa2, 0x9c, 0x56, 0x27, 0x04, + 0xb4, 0x05, 0x29, 0x83, 0xd8, 0x63, 0xc9, 0x3c, 0x27, 0x99, 0xd1, 0x18, 0x5d, 0x84, 0xb4, 0x25, + 0x72, 0x2c, 0xc7, 0x87, 0x24, 0x77, 0xbe, 0xa8, 0x94, 0x93, 0x6a, 0xca, 0xa2, 0x76, 0x47, 0x8c, + 0x51, 0x05, 0xce, 0x49, 0x2d, 0x1a, 0xb5, 0xc5, 0x39, 0x8d, 0x88, 0x36, 0xc2, 0x26, 0xcb, 0xbd, + 0x57, 0x54, 0xca, 0x29, 0x75, 0x5d, 0xb2, 0x5a, 0x01, 0x67, 0x1f, 0x9b, 0xec, 0x46, 0xf9, 0xb3, + 0x2f, 0x0b, 0x73, 0x5f, 0x7c, 0x59, 0x98, 0xfb, 0xf3, 0xef, 0xaf, 0x6d, 0x05, 0xe9, 0xa7, 0xef, + 0x8c, 0x2a, 0x41, 0xaa, 0xaa, 0xd4, 0x1d, 0x9b, 0x13, 0x9b, 0xe7, 0x94, 0xd2, 0x5f, 0x15, 0xb8, + 0x50, 0x8f, 0x5c, 0xc2, 0x72, 0x46, 0xd8, 0x7c, 0x97, 0xa9, 0xa7, 0x06, 0x69, 0x26, 0xce, 0x44, + 0x06, 0x7b, 0xf2, 0x35, 0x82, 0x3d, 0x25, 0xc4, 0x04, 0xe3, 0x46, 0xf1, 0x95, 0x6b, 0xfa, 0xf7, + 0x3c, 0x6c, 0x87, 0x6b, 0x7a, 0xe8, 0x18, 0xf4, 0x80, 0xea, 0xf8, 0x5d, 0xe7, 0xd4, 0xc8, 0xd7, + 0x92, 0x33, 0xf8, 0xda, 0xc2, 0xeb, 0xf9, 0xda, 0xe2, 0x0c, 0xbe, 0xb6, 0x74, 0x96, 0xaf, 0xa5, + 0xce, 0xf2, 0xb5, 0xf4, 0x6c, 0xbe, 0x06, 0xa7, 0xf9, 0xda, 0x7c, 0x4e, 0x29, 0xfd, 0x4a, 0x81, + 0xf3, 0xcd, 0xa7, 0x43, 0x3a, 0x72, 0xde, 0xd2, 0x4e, 0xdf, 0x87, 0x15, 0x12, 0xd3, 0xc7, 0x72, + 0x89, 0x62, 0xa2, 0x9c, 0xd9, 0xbd, 0x5c, 0x09, 0x0e, 0x3e, 0xaa, 0xc7, 0xe1, 0xe9, 0xc7, 0x67, + 0x57, 0xa7, 0x65, 0xa5, 0x85, 0x7f, 0x54, 0x60, 0x4b, 0xe4, 0x85, 0x3e, 0x51, 0xc9, 0x33, 0xec, + 0x19, 0x0d, 0x62, 0x3b, 0x16, 0x7b, 0x63, 0x3b, 0x4b, 0xb0, 0x62, 0x48, 0x4d, 0x1a, 0x77, 0x34, + 0x6c, 0x18, 0xd2, 0x4e, 0x89, 0x11, 0xc4, 0xae, 0x53, 0x33, 0x0c, 0x54, 0x86, 0xec, 0x04, 0xe3, + 0x89, 0x18, 0x13, 0xae, 0x2f, 0x60, 0xab, 0x21, 0x4c, 0x46, 0x1e, 0xb9, 0x91, 0x3f, 0xdb, 0xb5, + 0x4b, 0xff, 0x54, 0x20, 0x7b, 0xc7, 0x74, 0x7a, 0xd8, 0xec, 0x98, 0x98, 0x0d, 0x44, 0xce, 0x1c, + 0x8b, 0x90, 0xf2, 0x48, 0x50, 0xac, 0xa4, 0xf9, 0x33, 0x87, 0x94, 0x10, 0x93, 0xe5, 0xf3, 0x26, + 0xac, 0x47, 0xe5, 0x23, 0x72, 0x70, 0xb9, 0xda, 0x5b, 0xe7, 0x5e, 0x7c, 0x53, 0x58, 0x0b, 0x83, + 0xa9, 0x2e, 0x9d, 0xbd, 0xa1, 0xae, 0xe9, 0x53, 0x04, 0x03, 0xe5, 0x21, 0x43, 0x7b, 0xba, 0xc6, + 0xc8, 0x53, 0xcd, 0x1e, 0x5a, 0x32, 0x36, 0x92, 0x6a, 0x9a, 0xf6, 0xf4, 0x0e, 0x79, 0xba, 0x37, + 0xb4, 0xd0, 0xc7, 0xb0, 0x11, 0x36, 0x95, 0xc2, 0x9b, 0x34, 0x21, 0x2f, 0xb6, 0xcb, 0x93, 0xe1, + 0xb2, 0xac, 0x9e, 0x0b, 0xb9, 0xfb, 0xd8, 0x14, 0x93, 0xd5, 0x0c, 0xc3, 0x2b, 0xfd, 0x6b, 0x01, + 0x16, 0xdb, 0xd8, 0xc3, 0x16, 0x43, 0x5d, 0x58, 0xe3, 0xc4, 0x72, 0x4d, 0xcc, 0x89, 0xe6, 0xb7, + 0x26, 0xc1, 0x4a, 0xaf, 0xca, 0x96, 0x25, 0xde, 0x00, 0x56, 0x62, 0x2d, 0xdf, 0x68, 0xa7, 0x52, + 0x97, 0xd4, 0x0e, 0xc7, 0x9c, 0xa8, 0xab, 0xa1, 0x0e, 0x9f, 0x88, 0xae, 0x43, 0x8e, 0x7b, 0x43, + 0xc6, 0x27, 0x4d, 0xc3, 0xa4, 0x5a, 0xfa, 0x67, 0xbd, 0x11, 0xf2, 0xfd, 0x3a, 0x1b, 0x55, 0xc9, + 0x93, 0xfb, 0x83, 0xc4, 0x9b, 0xf4, 0x07, 0x06, 0x6c, 0x33, 0x71, 0xa8, 0x9a, 0x45, 0xb8, 0xac, + 0xe2, 0xae, 0x49, 0x6c, 0xca, 0x06, 0xa1, 0xf2, 0xc5, 0xd9, 0x95, 0x6f, 0x4a, 0x45, 0x0f, 0x85, + 0x1e, 0x35, 0x54, 0x13, 0xcc, 0x52, 0x87, 0xfc, 0xc9, 0xb3, 0x44, 0x0b, 0x5f, 0x92, 0x0b, 0xbf, + 0x78, 0x82, 0x8a, 0x68, 0xf5, 0x0c, 0x3e, 0x8c, 0x75, 0x1b, 0x22, 0x9a, 0x34, 0xe9, 0xc8, 0x9a, + 0x47, 0xfa, 0xa2, 0x24, 0x63, 0xbf, 0xf1, 0x20, 0x24, 0xea, 0x98, 0x02, 0x9f, 0x16, 0xed, 0x72, + 0xcc, 0xa9, 0xa9, 0x1d, 0xb4, 0x95, 0xa5, 0x49, 0x53, 0x12, 0xc5, 0xa6, 0x1a, 0xd3, 0x75, 0x9b, + 0x10, 0x11, 0x45, 0xb1, 0xc6, 0x84, 0xb8, 0x8e, 0x3e, 0x90, 0x39, 0x29, 0xa1, 0xae, 0x46, 0x4d, + 0x48, 0x53, 0x50, 0xd1, 0x13, 0xb8, 0x6a, 0x0f, 0xad, 0x1e, 0xf1, 0x34, 0xe7, 0xc0, 0x07, 0xca, + 0xc8, 0x63, 0x1c, 0x7b, 0x5c, 0xf3, 0x88, 0x4e, 0xe8, 0x48, 0x9c, 0xb8, 0x6f, 0x39, 0x93, 0x7d, + 0x51, 0x42, 0xbd, 0xec, 0x8b, 0x3c, 0x3a, 0x90, 0x3a, 0x58, 0xd7, 0xe9, 0x08, 0xb8, 0x1a, 0xa2, + 0x7d, 0xc3, 0x18, 0x6a, 0xc1, 0x25, 0x0b, 0x3f, 0xd7, 0x22, 0x67, 0x16, 0x86, 0x13, 0x9b, 0x0d, + 0x99, 0x36, 0x49, 0xe6, 0x41, 0x6f, 0x94, 0xb7, 0xf0, 0xf3, 0x76, 0x80, 0xab, 0x87, 0xb0, 0xfd, + 0x08, 0x75, 0x2f, 0x99, 0x4a, 0x66, 0x17, 0xee, 0x25, 0x53, 0x0b, 0xd9, 0xc5, 0x7b, 0xc9, 0x54, + 0x2a, 0x9b, 0x2e, 0xfd, 0x3f, 0xa4, 0x65, 0x5c, 0xd7, 0xf4, 0x43, 0x26, 0xb3, 0xbb, 0x61, 0x78, + 0x84, 0x31, 0xc2, 0x72, 0x4a, 0x90, 0xdd, 0x43, 0x42, 0x89, 0xc3, 0xe6, 0x69, 0x37, 0x06, 0x86, + 0x3e, 0x85, 0x25, 0x97, 0xc8, 0x76, 0x56, 0x0a, 0x66, 0x76, 0x3f, 0xa9, 0xcc, 0x70, 0xd5, 0xab, + 0x9c, 0xa6, 0x50, 0x0d, 0xb5, 0x95, 0xbc, 0xc9, 0x3d, 0xe5, 0x48, 0xaf, 0xc0, 0xd0, 0xfe, 0xd1, + 0x49, 0xbf, 0xff, 0x5a, 0x93, 0x1e, 0xd1, 0x37, 0x99, 0xf3, 0x2a, 0x64, 0x6a, 0xfe, 0xb2, 0x1f, + 0x88, 0xd2, 0x75, 0x6c, 0x5b, 0x96, 0xe3, 0xdb, 0xb2, 0x07, 0xab, 0x41, 0xf3, 0xd7, 0x75, 0x64, + 0x6e, 0x42, 0xef, 0x03, 0x04, 0x5d, 0xa3, 0xc8, 0x69, 0x7e, 0x76, 0x4f, 0x07, 0x94, 0x96, 0x31, + 0x55, 0xd1, 0xe7, 0xa7, 0x2a, 0xba, 0xac, 0x1a, 0x0e, 0x6c, 0xee, 0xc7, 0xab, 0xae, 0x2c, 0x20, + 0x6d, 0xac, 0x1f, 0x12, 0xce, 0x90, 0x0a, 0x49, 0x59, 0x5d, 0xfd, 0xe5, 0x5e, 0x3f, 0x75, 0xb9, + 0xa3, 0x9d, 0xca, 0x69, 0x4a, 0x1a, 0x98, 0xe3, 0x20, 0x06, 0xa4, 0xae, 0xd2, 0xcf, 0x15, 0xc8, + 0xdd, 0x27, 0xe3, 0x1a, 0x63, 0xb4, 0x6f, 0x5b, 0xc4, 0xe6, 0x22, 0xfa, 0xb0, 0x4e, 0xc4, 0x27, + 0xfa, 0x00, 0x56, 0x22, 0xc7, 0x93, 0xc9, 0x53, 0x91, 0xc9, 0x73, 0x39, 0x24, 0x8a, 0x7d, 0x42, + 0x37, 0x00, 0x5c, 0x8f, 0x8c, 0x34, 0x5d, 0x3b, 0x24, 0x63, 0xb9, 0xa6, 0xcc, 0xee, 0x76, 0x3c, + 0x29, 0xfa, 0xb7, 0xde, 0x4a, 0x7b, 0xd8, 0x33, 0xa9, 0x7e, 0x9f, 0x8c, 0xd5, 0x94, 0xc0, 0xd7, + 0xef, 0x93, 0xb1, 0xa8, 0x82, 0xb2, 0x49, 0x91, 0x99, 0x2c, 0xa1, 0xfa, 0x83, 0xd2, 0x2f, 0x15, + 0xb8, 0x10, 0x2d, 0x20, 0x3c, 0xaf, 0xf6, 0xb0, 0x27, 0x24, 0xe2, 0xfb, 0xa7, 0x4c, 0x77, 0x44, + 0xc7, 0xac, 0x9d, 0x3f, 0xc1, 0xda, 0x9b, 0xb0, 0x1c, 0xa5, 0x12, 0x61, 0x6f, 0x62, 0x06, 0x7b, + 0x33, 0xa1, 0xc4, 0x7d, 0x32, 0x2e, 0xfd, 0x24, 0x66, 0xdb, 0xad, 0x71, 0xcc, 0x85, 0xbd, 0x57, + 0xd8, 0x16, 0x4d, 0x1b, 0xb7, 0x4d, 0x8f, 0xcb, 0x1f, 0x5b, 0x40, 0xe2, 0xf8, 0x02, 0x4a, 0x7f, + 0x51, 0x60, 0x23, 0x3e, 0x2b, 0xeb, 0x3a, 0x6d, 0x6f, 0x68, 0x93, 0xfd, 0xdd, 0xb3, 0xe6, 0xbf, + 0x09, 0x29, 0x57, 0xa0, 0x34, 0xce, 0x82, 0x23, 0x9a, 0xad, 0x64, 0x2f, 0x49, 0xa9, 0xae, 0x08, + 0xf1, 0xd5, 0xa9, 0x05, 0xb0, 0x60, 0xe7, 0x3e, 0x9a, 0x29, 0xe8, 0x62, 0x01, 0xa5, 0xae, 0xc4, + 0xd7, 0xcc, 0x4a, 0x7f, 0x50, 0x00, 0x1d, 0xcf, 0x56, 0xe8, 0x3b, 0x80, 0xa6, 0x72, 0x5e, 0xdc, + 0xff, 0xb2, 0x6e, 0x2c, 0xcb, 0xc9, 0x9d, 0x8b, 0xfc, 0x68, 0x3e, 0xe6, 0x47, 0xe8, 0x7b, 0x00, + 0xae, 0x3c, 0xc4, 0x99, 0x4f, 0x3a, 0xed, 0x86, 0x9f, 0xa8, 0x00, 0x99, 0x1f, 0x39, 0xd4, 0x8e, + 0x3f, 0x58, 0x24, 0x54, 0x10, 0x24, 0xff, 0x2d, 0xa2, 0xf4, 0x33, 0x65, 0x92, 0x12, 0x83, 0x6c, + 0x5d, 0x33, 0xcd, 0xa0, 0x07, 0x44, 0x2e, 0x2c, 0x85, 0xf9, 0xde, 0x0f, 0xd7, 0xed, 0x13, 0x6b, + 0x52, 0x83, 0xe8, 0xb2, 0x2c, 0x5d, 0x17, 0x3b, 0xfe, 0xdb, 0x6f, 0x0b, 0x57, 0xfb, 0x94, 0x0f, + 0x86, 0xbd, 0x8a, 0xee, 0x58, 0xc1, 0x2b, 0x4e, 0xf0, 0xef, 0x1a, 0x33, 0x0e, 0xab, 0x7c, 0xec, + 0x12, 0x16, 0xca, 0xb0, 0xdf, 0xfc, 0xe3, 0x77, 0x57, 0x14, 0x35, 0x9c, 0xa6, 0x64, 0x40, 0x36, + 0xba, 0x83, 0x10, 0x8e, 0x0d, 0xcc, 0x31, 0x42, 0x90, 0xb4, 0xb1, 0x15, 0x36, 0x99, 0xf2, 0x7b, + 0x86, 0x1e, 0x73, 0x0b, 0x52, 0x56, 0xa0, 0x21, 0xb8, 0x75, 0x44, 0xe3, 0xd2, 0x4f, 0x17, 0xa1, + 0x18, 0x4e, 0xd3, 0xf2, 0xdf, 0x66, 0xe8, 0x8f, 0xfd, 0x16, 0x5c, 0x74, 0x4e, 0xa2, 0x7e, 0xb3, + 0x13, 0xde, 0x7b, 0x94, 0xb7, 0xf3, 0xde, 0x33, 0xff, 0xca, 0xf7, 0x9e, 0xc4, 0x2b, 0xde, 0x7b, + 0x92, 0x6f, 0xef, 0xbd, 0x67, 0xe1, 0xad, 0xbf, 0xf7, 0x2c, 0xbe, 0xa3, 0xf7, 0x9e, 0xa5, 0xff, + 0xc9, 0x7b, 0x4f, 0xea, 0xad, 0xbe, 0xf7, 0xa4, 0xdf, 0xec, 0xbd, 0x07, 0xde, 0xe8, 0xbd, 0x27, + 0x33, 0xd3, 0x7b, 0x4f, 0xe9, 0x17, 0xf3, 0xb0, 0x21, 0x6f, 0xd2, 0x9d, 0x01, 0x76, 0xc5, 0xe1, + 0x4e, 0x42, 0x20, 0xba, 0x9e, 0x2b, 0x33, 0x5c, 0xcf, 0xe7, 0x5f, 0xef, 0x7a, 0x9e, 0x98, 0xe1, + 0x7a, 0x9e, 0x3c, 0xeb, 0x7a, 0xbe, 0x70, 0xd6, 0xf5, 0x7c, 0x71, 0xb6, 0xeb, 0xf9, 0xd2, 0x29, + 0xd7, 0xf3, 0x52, 0x01, 0x32, 0x51, 0x82, 0x30, 0x18, 0xca, 0x42, 0x82, 0x1a, 0x61, 0x43, 0x29, + 0x3e, 0x4b, 0x3b, 0x70, 0xa1, 0x16, 0x9a, 0x45, 0x8c, 0xf8, 0xed, 0x18, 0x6d, 0xc0, 0xa2, 0x7f, + 0x43, 0x0d, 0xf0, 0xc1, 0xe8, 0xca, 0x9f, 0x14, 0x58, 0x89, 0x1a, 0x81, 0x01, 0x66, 0x04, 0xe5, + 0x61, 0xab, 0xfe, 0x68, 0xaf, 0xf3, 0xf8, 0x61, 0x53, 0xd5, 0xda, 0x77, 0x6b, 0x9d, 0xa6, 0xf6, + 0x78, 0xaf, 0xd3, 0x6e, 0xd6, 0x5b, 0xb7, 0x5b, 0xcd, 0x46, 0x76, 0x0e, 0xbd, 0x0f, 0x9b, 0x47, + 0xf8, 0x6a, 0xf3, 0x4e, 0xab, 0xd3, 0x6d, 0xaa, 0xcd, 0x46, 0x56, 0x39, 0x41, 0xbc, 0xb5, 0xd7, + 0xea, 0xb6, 0x6a, 0x0f, 0x5a, 0x4f, 0x9a, 0x8d, 0xec, 0x3c, 0xba, 0x08, 0x17, 0x8e, 0xf0, 0x1f, + 0xd4, 0x1e, 0xef, 0xd5, 0xef, 0x36, 0x1b, 0xd9, 0x04, 0xda, 0x82, 0x8d, 0x23, 0xcc, 0x4e, 0xf7, + 0x51, 0xbb, 0xdd, 0x6c, 0x64, 0x93, 0x27, 0xf0, 0x1a, 0xcd, 0x07, 0xcd, 0x6e, 0xb3, 0x91, 0x5d, + 0xd8, 0x4a, 0x7e, 0xf6, 0xeb, 0xfc, 0xdc, 0xad, 0x4f, 0xbf, 0x7a, 0x91, 0x57, 0xbe, 0x7e, 0x91, + 0x57, 0xfe, 0xfe, 0x22, 0xaf, 0x7c, 0xfe, 0x32, 0x3f, 0xf7, 0xf5, 0xcb, 0xfc, 0xdc, 0xdf, 0x5e, + 0xe6, 0xe7, 0x9e, 0x7c, 0x72, 0x3c, 0xf9, 0x4f, 0x8a, 0xeb, 0xb5, 0xe8, 0xc7, 0x90, 0xd1, 0x77, + 0xab, 0xcf, 0xa7, 0x7f, 0x6a, 0x91, 0x75, 0xa1, 0xb7, 0x28, 0xe3, 0xfa, 0xe3, 0xff, 0x06, 0x00, + 0x00, 0xff, 0xff, 0x21, 0xa7, 0x53, 0x56, 0x9b, 0x19, 0x00, 0x00, } func (m *ConsumerAdditionProposal) Marshal() (dAtA []byte, err error) { @@ -3297,6 +3344,38 @@ func (m *ConsumerIds) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *AllowlistedRewardDenoms) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AllowlistedRewardDenoms) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AllowlistedRewardDenoms) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Denoms) > 0 { + for iNdEx := len(m.Denoms) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Denoms[iNdEx]) + copy(dAtA[i:], m.Denoms[iNdEx]) + i = encodeVarintProvider(dAtA, i, uint64(len(m.Denoms[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func encodeVarintProvider(dAtA []byte, offset int, v uint64) int { offset -= sovProvider(v) base := offset @@ -3893,6 +3972,21 @@ func (m *ConsumerIds) Size() (n int) { return n } +func (m *AllowlistedRewardDenoms) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Denoms) > 0 { + for _, s := range m.Denoms { + l = len(s) + n += 1 + l + sovProvider(uint64(l)) + } + } + return n +} + func sovProvider(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -8012,6 +8106,88 @@ func (m *ConsumerIds) Unmarshal(dAtA []byte) error { } return nil } +func (m *AllowlistedRewardDenoms) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProvider + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AllowlistedRewardDenoms: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AllowlistedRewardDenoms: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denoms", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProvider + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthProvider + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthProvider + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denoms = append(m.Denoms, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipProvider(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthProvider + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipProvider(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/ccv/provider/types/tx.pb.go b/x/ccv/provider/types/tx.pb.go index 6629e49ba1..6bd9a119ad 100644 --- a/x/ccv/provider/types/tx.pb.go +++ b/x/ccv/provider/types/tx.pb.go @@ -1335,6 +1335,8 @@ type MsgCreateConsumer struct { Metadata ConsumerMetadata `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata"` InitializationParameters *ConsumerInitializationParameters `protobuf:"bytes,4,opt,name=initialization_parameters,json=initializationParameters,proto3" json:"initialization_parameters,omitempty"` PowerShapingParameters *PowerShapingParameters `protobuf:"bytes,5,opt,name=power_shaping_parameters,json=powerShapingParameters,proto3" json:"power_shaping_parameters,omitempty"` + // allowlisted reward denoms of the consumer + AllowlistedRewardDenoms *AllowlistedRewardDenoms `protobuf:"bytes,7,opt,name=allowlisted_reward_denoms,json=allowlistedRewardDenoms,proto3" json:"allowlisted_reward_denoms,omitempty"` } func (m *MsgCreateConsumer) Reset() { *m = MsgCreateConsumer{} } @@ -1405,6 +1407,13 @@ func (m *MsgCreateConsumer) GetPowerShapingParameters() *PowerShapingParameters return nil } +func (m *MsgCreateConsumer) GetAllowlistedRewardDenoms() *AllowlistedRewardDenoms { + if m != nil { + return m.AllowlistedRewardDenoms + } + return nil +} + // MsgCreateConsumerResponse defines response type for MsgCreateConsumer type MsgCreateConsumerResponse struct { ConsumerId string `protobuf:"bytes,1,opt,name=consumer_id,json=consumerId,proto3" json:"consumer_id,omitempty"` @@ -1464,6 +1473,8 @@ type MsgUpdateConsumer struct { InitializationParameters *ConsumerInitializationParameters `protobuf:"bytes,5,opt,name=initialization_parameters,json=initializationParameters,proto3" json:"initialization_parameters,omitempty"` // the power-shaping parameters of the consumer when updated PowerShapingParameters *PowerShapingParameters `protobuf:"bytes,6,opt,name=power_shaping_parameters,json=powerShapingParameters,proto3" json:"power_shaping_parameters,omitempty"` + // allowlisted reward denoms of the consumer (if provided they overwrite previously set reward denoms) + AllowlistedRewardDenoms *AllowlistedRewardDenoms `protobuf:"bytes,7,opt,name=allowlisted_reward_denoms,json=allowlistedRewardDenoms,proto3" json:"allowlisted_reward_denoms,omitempty"` } func (m *MsgUpdateConsumer) Reset() { *m = MsgUpdateConsumer{} } @@ -1541,6 +1552,13 @@ func (m *MsgUpdateConsumer) GetPowerShapingParameters() *PowerShapingParameters return nil } +func (m *MsgUpdateConsumer) GetAllowlistedRewardDenoms() *AllowlistedRewardDenoms { + if m != nil { + return m.AllowlistedRewardDenoms + } + return nil +} + // MsgUpdateConsumerResponse defines response type for MsgUpdateConsumer messages type MsgUpdateConsumerResponse struct { } @@ -1612,134 +1630,135 @@ func init() { } var fileDescriptor_43221a4391e9fbf4 = []byte{ - // 2021 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x59, 0xcd, 0x6f, 0x1b, 0xc7, - 0xd9, 0xd7, 0x92, 0x94, 0x4c, 0x8e, 0x64, 0x7d, 0x8c, 0xe4, 0x68, 0x45, 0x3b, 0xa2, 0xcc, 0x37, - 0x6f, 0x22, 0xb8, 0xd1, 0x32, 0x56, 0x1b, 0x17, 0x55, 0xd3, 0x02, 0xfa, 0x70, 0x6b, 0xa5, 0x95, - 0xa5, 0xac, 0x5c, 0x07, 0x68, 0x81, 0x2e, 0x86, 0xbb, 0xe3, 0xe5, 0xc0, 0xdc, 0x9d, 0xc5, 0xce, - 0x90, 0x8a, 0x7a, 0x2a, 0x02, 0x14, 0xc8, 0x31, 0x05, 0x7a, 0xe8, 0x31, 0x87, 0xf6, 0x50, 0xa0, - 0x05, 0x7c, 0xc8, 0xb1, 0x7f, 0x80, 0x81, 0x5e, 0xd2, 0x9c, 0x8a, 0xa2, 0x70, 0x0b, 0xfb, 0x90, - 0x5e, 0x7a, 0xe9, 0xad, 0xb7, 0x62, 0x3e, 0x76, 0xc9, 0x25, 0x29, 0x69, 0x45, 0x23, 0xed, 0xa1, - 0x17, 0x62, 0x77, 0x9e, 0xdf, 0xf3, 0x7b, 0x3e, 0x66, 0xe6, 0x79, 0x66, 0x96, 0xe0, 0x4d, 0x12, - 0x72, 0x1c, 0xbb, 0x2d, 0x44, 0x42, 0x87, 0x61, 0xb7, 0x13, 0x13, 0x7e, 0xda, 0x70, 0xdd, 0x6e, - 0x23, 0x8a, 0x69, 0x97, 0x78, 0x38, 0x6e, 0x74, 0x6f, 0x37, 0xf8, 0x07, 0x56, 0x14, 0x53, 0x4e, - 0xe1, 0xff, 0x8d, 0x40, 0x5b, 0xae, 0xdb, 0xb5, 0x12, 0xb4, 0xd5, 0xbd, 0x5d, 0x5d, 0x40, 0x01, - 0x09, 0x69, 0x43, 0xfe, 0x2a, 0xbd, 0xea, 0x0d, 0x9f, 0x52, 0xbf, 0x8d, 0x1b, 0x28, 0x22, 0x0d, - 0x14, 0x86, 0x94, 0x23, 0x4e, 0x68, 0xc8, 0xb4, 0xb4, 0xa6, 0xa5, 0xf2, 0xad, 0xd9, 0x79, 0xd4, - 0xe0, 0x24, 0xc0, 0x8c, 0xa3, 0x20, 0xd2, 0x80, 0xd5, 0x41, 0x80, 0xd7, 0x89, 0x25, 0x83, 0x96, - 0xaf, 0x0c, 0xca, 0x51, 0x78, 0xaa, 0x45, 0x4b, 0x3e, 0xf5, 0xa9, 0x7c, 0x6c, 0x88, 0xa7, 0x44, - 0xc1, 0xa5, 0x2c, 0xa0, 0xcc, 0x51, 0x02, 0xf5, 0xa2, 0x45, 0xcb, 0xea, 0xad, 0x11, 0x30, 0x5f, - 0x84, 0x1e, 0x30, 0x3f, 0xf1, 0x92, 0x34, 0xdd, 0x86, 0x4b, 0x63, 0xdc, 0x70, 0xdb, 0x04, 0x87, - 0x5c, 0x48, 0xd5, 0x93, 0x06, 0x6c, 0xe6, 0x49, 0x65, 0x9a, 0x28, 0xa5, 0xd3, 0x10, 0xa4, 0x6d, - 0xe2, 0xb7, 0xb8, 0xa2, 0x62, 0x0d, 0x8e, 0x43, 0x0f, 0xc7, 0x01, 0x51, 0x06, 0x7a, 0x6f, 0x89, - 0x17, 0x7d, 0x72, 0x7e, 0x1a, 0x61, 0xd6, 0xc0, 0x82, 0x2f, 0x74, 0xb1, 0x02, 0xd4, 0xff, 0x65, - 0x80, 0xa5, 0x03, 0xe6, 0x6f, 0x33, 0x46, 0xfc, 0x70, 0x97, 0x86, 0xac, 0x13, 0xe0, 0xf8, 0x7b, - 0xf8, 0x14, 0xbe, 0x0a, 0xca, 0xca, 0x37, 0xe2, 0x99, 0xc6, 0x9a, 0xb1, 0x5e, 0xd9, 0x29, 0x98, - 0x86, 0x7d, 0x45, 0x8e, 0xed, 0x7b, 0xf0, 0xeb, 0xe0, 0x6a, 0xe2, 0x9b, 0x83, 0x3c, 0x2f, 0x36, - 0x0b, 0x12, 0x03, 0xff, 0xf9, 0xac, 0x36, 0x7b, 0x8a, 0x82, 0xf6, 0x56, 0x5d, 0x8c, 0x62, 0xc6, - 0xea, 0xf6, 0x4c, 0x02, 0xdc, 0xf6, 0xbc, 0x18, 0xde, 0x04, 0x33, 0xae, 0x36, 0xe3, 0x3c, 0xc6, - 0xa7, 0x66, 0x51, 0xe8, 0xd9, 0xd3, 0x6e, 0x9f, 0xe9, 0xb7, 0xc0, 0x94, 0xf0, 0x06, 0xc7, 0x66, - 0x49, 0x92, 0x9a, 0x9f, 0x7f, 0xba, 0xb1, 0xa4, 0xb3, 0xbe, 0xad, 0x58, 0x8f, 0x79, 0x4c, 0x42, - 0xdf, 0xd6, 0x38, 0x58, 0x03, 0x29, 0x81, 0xf0, 0x77, 0x52, 0x72, 0x82, 0x64, 0x68, 0xdf, 0xdb, - 0x5a, 0xfc, 0xe8, 0x93, 0xda, 0xc4, 0xdf, 0x3f, 0xa9, 0x4d, 0x7c, 0xf8, 0xc5, 0x93, 0x5b, 0x5a, - 0xab, 0xbe, 0x0a, 0x6e, 0x8c, 0x0a, 0xdd, 0xc6, 0x2c, 0xa2, 0x21, 0xc3, 0xf5, 0xe7, 0x06, 0x78, - 0xf5, 0x80, 0xf9, 0xc7, 0x9d, 0x66, 0x40, 0x78, 0x02, 0x38, 0x20, 0xac, 0x89, 0x5b, 0xa8, 0x4b, - 0x68, 0x27, 0x86, 0x77, 0x40, 0x85, 0x49, 0x29, 0xc7, 0xb1, 0xce, 0xd2, 0xd9, 0xce, 0xf6, 0xa0, - 0xf0, 0x08, 0xcc, 0x04, 0x7d, 0x3c, 0x32, 0x79, 0xd3, 0x9b, 0x6f, 0x5a, 0xa4, 0xe9, 0x5a, 0xfd, - 0xd3, 0x6b, 0xf5, 0x4d, 0x68, 0xf7, 0xb6, 0xd5, 0x6f, 0xdb, 0xce, 0x30, 0x0c, 0x66, 0xa0, 0x38, - 0x94, 0x81, 0x57, 0xfa, 0x33, 0xd0, 0x73, 0xa5, 0xfe, 0x06, 0xf8, 0xff, 0x73, 0x63, 0x4c, 0xb3, - 0xf1, 0xc7, 0xc2, 0x88, 0x6c, 0xec, 0xd1, 0x4e, 0xb3, 0x8d, 0x1f, 0x52, 0x4e, 0x42, 0x7f, 0xec, - 0x6c, 0x38, 0x60, 0xd9, 0xeb, 0x44, 0x6d, 0xe2, 0x22, 0x8e, 0x9d, 0x2e, 0xe5, 0xd8, 0x49, 0x16, - 0xa9, 0x4e, 0xcc, 0x1b, 0xfd, 0x79, 0x90, 0xcb, 0xd8, 0xda, 0x4b, 0x14, 0x1e, 0x52, 0x8e, 0xef, - 0x6a, 0xb8, 0x7d, 0xcd, 0x1b, 0x35, 0x0c, 0x7f, 0x0c, 0x96, 0x49, 0xf8, 0x28, 0x46, 0xae, 0x28, - 0x02, 0x4e, 0xb3, 0x4d, 0xdd, 0xc7, 0x4e, 0x0b, 0x23, 0x0f, 0xc7, 0x32, 0x51, 0xd3, 0x9b, 0xaf, - 0x5f, 0x94, 0xf9, 0x7b, 0x12, 0x6d, 0x5f, 0xeb, 0xd1, 0xec, 0x08, 0x16, 0x35, 0x3c, 0x98, 0xfc, - 0xd2, 0x4b, 0x25, 0xbf, 0x3f, 0xa5, 0x69, 0xf2, 0x7f, 0x65, 0x80, 0xb9, 0x03, 0xe6, 0xff, 0x20, - 0xf2, 0x10, 0xc7, 0x47, 0x28, 0x46, 0x01, 0x13, 0xe9, 0x46, 0x1d, 0xde, 0xa2, 0xa2, 0x70, 0x5c, - 0x9c, 0xee, 0x14, 0x0a, 0xf7, 0xc1, 0x54, 0x24, 0x19, 0x74, 0x76, 0xbf, 0x62, 0xe5, 0x28, 0xd3, - 0x96, 0x32, 0xba, 0x53, 0x7a, 0xfa, 0xac, 0x36, 0x61, 0x6b, 0x82, 0xad, 0x59, 0x19, 0x4f, 0x4a, - 0x5d, 0x5f, 0x01, 0xcb, 0x03, 0x5e, 0xa6, 0x11, 0xfc, 0xa5, 0x0c, 0x16, 0x0f, 0x98, 0x9f, 0x44, - 0xb9, 0xed, 0x79, 0x44, 0xa4, 0x11, 0xae, 0x0c, 0xd6, 0x99, 0x5e, 0x8d, 0xf9, 0x2e, 0x98, 0x25, - 0x21, 0xe1, 0x04, 0xb5, 0x9d, 0x16, 0x16, 0x73, 0xa3, 0x1d, 0xae, 0xca, 0xd9, 0x12, 0xb5, 0xd5, - 0xd2, 0x15, 0x55, 0xce, 0x90, 0x40, 0x68, 0xff, 0xae, 0x6a, 0x3d, 0x35, 0x28, 0x6a, 0x8e, 0x8f, - 0x43, 0xcc, 0x08, 0x73, 0x5a, 0x88, 0xb5, 0xe4, 0xa4, 0xcf, 0xd8, 0xd3, 0x7a, 0xec, 0x1e, 0x62, - 0x2d, 0x31, 0x85, 0x4d, 0x12, 0xa2, 0xf8, 0x54, 0x21, 0x4a, 0x12, 0x01, 0xd4, 0x90, 0x04, 0xec, - 0x02, 0xc0, 0x22, 0x74, 0x12, 0x3a, 0xa2, 0xdb, 0xc8, 0x0a, 0x23, 0x1c, 0x51, 0x9d, 0xc4, 0x4a, - 0x3a, 0x89, 0xf5, 0x20, 0x69, 0x45, 0x3b, 0x65, 0xe1, 0xc8, 0xc7, 0x7f, 0xad, 0x19, 0x76, 0x45, - 0xea, 0x09, 0x09, 0xbc, 0x0f, 0xe6, 0x3b, 0x61, 0x93, 0x86, 0x1e, 0x09, 0x7d, 0x27, 0xc2, 0x31, - 0xa1, 0x9e, 0x39, 0x25, 0xa9, 0x56, 0x86, 0xa8, 0xf6, 0x74, 0xd3, 0x52, 0x4c, 0xbf, 0x14, 0x4c, - 0x73, 0xa9, 0xf2, 0x91, 0xd4, 0x85, 0xef, 0x01, 0xe8, 0xba, 0x5d, 0xe9, 0x12, 0xed, 0xf0, 0x84, - 0xf1, 0x4a, 0x7e, 0xc6, 0x79, 0xd7, 0xed, 0x3e, 0x50, 0xda, 0x9a, 0xf2, 0x47, 0x60, 0x99, 0xc7, - 0x28, 0x64, 0x8f, 0x70, 0x3c, 0xc8, 0x5b, 0xce, 0xcf, 0x7b, 0x2d, 0xe1, 0xc8, 0x92, 0xdf, 0x03, - 0x6b, 0xe9, 0x46, 0x89, 0xb1, 0x47, 0x18, 0x8f, 0x49, 0xb3, 0x23, 0x77, 0x65, 0xb2, 0xaf, 0xcc, - 0x8a, 0x5c, 0x04, 0xab, 0x09, 0xce, 0xce, 0xc0, 0xbe, 0xa3, 0x51, 0xf0, 0x10, 0xbc, 0x26, 0xf7, - 0x31, 0x13, 0xce, 0x39, 0x19, 0x26, 0x69, 0x3a, 0x20, 0x8c, 0x09, 0x36, 0xb0, 0x66, 0xac, 0x17, - 0xed, 0x9b, 0x0a, 0x7b, 0x84, 0xe3, 0xbd, 0x3e, 0xe4, 0x83, 0x3e, 0x20, 0xdc, 0x00, 0xb0, 0x45, - 0x18, 0xa7, 0x31, 0x71, 0x51, 0xdb, 0xc1, 0x21, 0x8f, 0x09, 0x66, 0xe6, 0xb4, 0x54, 0x5f, 0xe8, - 0x49, 0xee, 0x2a, 0x01, 0x7c, 0x17, 0xdc, 0x3c, 0xd3, 0xa8, 0xe3, 0xb6, 0x50, 0x18, 0xe2, 0xb6, - 0x39, 0x23, 0x43, 0xa9, 0x79, 0x67, 0xd8, 0xdc, 0x55, 0x30, 0xb8, 0x08, 0x26, 0x39, 0x8d, 0x9c, - 0xfb, 0xe6, 0xd5, 0x35, 0x63, 0xfd, 0xaa, 0x5d, 0xe2, 0x34, 0xba, 0x0f, 0xdf, 0x02, 0x4b, 0x5d, - 0xd4, 0x26, 0x1e, 0xe2, 0x34, 0x66, 0x4e, 0x44, 0x4f, 0x70, 0xec, 0xb8, 0x28, 0x32, 0x67, 0x25, - 0x06, 0xf6, 0x64, 0x47, 0x42, 0xb4, 0x8b, 0x22, 0x78, 0x0b, 0x2c, 0xa4, 0xa3, 0x0e, 0xc3, 0x5c, - 0xc2, 0xe7, 0x24, 0x7c, 0x2e, 0x15, 0x1c, 0x63, 0x2e, 0xb0, 0x37, 0x40, 0x05, 0xb5, 0xdb, 0xf4, - 0xa4, 0x4d, 0x18, 0x37, 0xe7, 0xd7, 0x8a, 0xeb, 0x15, 0xbb, 0x37, 0x00, 0xab, 0xa0, 0xec, 0xe1, - 0xf0, 0x54, 0x0a, 0x17, 0xa4, 0x30, 0x7d, 0xcf, 0x56, 0x1d, 0x98, 0xbf, 0xea, 0x5c, 0x07, 0x95, - 0x40, 0xd4, 0x17, 0x8e, 0x1e, 0x63, 0x73, 0x71, 0xcd, 0x58, 0x2f, 0xd9, 0xe5, 0x80, 0x84, 0xc7, - 0xe2, 0x1d, 0x5a, 0x60, 0x51, 0x5a, 0x77, 0x48, 0x28, 0xe6, 0xb7, 0x8b, 0x9d, 0x2e, 0x6a, 0x33, - 0x73, 0x69, 0xcd, 0x58, 0x2f, 0xdb, 0x0b, 0x52, 0xb4, 0xaf, 0x25, 0x0f, 0x51, 0x9b, 0x6d, 0xcd, - 0x67, 0xeb, 0x8e, 0x69, 0xd4, 0x7f, 0x6f, 0x00, 0xd8, 0x57, 0x5e, 0x6c, 0x1c, 0xd0, 0x2e, 0x6a, - 0x9f, 0x57, 0x5d, 0xb6, 0x41, 0x85, 0x89, 0xb4, 0xcb, 0xfd, 0x5c, 0xb8, 0xc4, 0x7e, 0x2e, 0x0b, - 0x35, 0xb9, 0x9d, 0x33, 0xb9, 0x28, 0xe6, 0xce, 0xc5, 0x08, 0xf7, 0x23, 0xb0, 0x70, 0xc0, 0x7c, - 0xe9, 0x35, 0x4e, 0x62, 0x18, 0x6c, 0x2b, 0xc6, 0x60, 0x5b, 0x81, 0x16, 0x98, 0xa4, 0x27, 0xe2, - 0x9c, 0x54, 0xb8, 0xc0, 0xb6, 0x82, 0x6d, 0x01, 0x61, 0x57, 0x3d, 0xd7, 0xaf, 0x83, 0x95, 0x21, - 0x8b, 0x69, 0xb1, 0xfe, 0x9d, 0x01, 0xae, 0x89, 0x6c, 0xb6, 0x50, 0xe8, 0x63, 0x1b, 0x9f, 0xa0, - 0xd8, 0xdb, 0xc3, 0x21, 0x0d, 0x18, 0xac, 0x83, 0xab, 0x9e, 0x7c, 0x72, 0x38, 0x15, 0x07, 0x3f, - 0xd3, 0x90, 0xeb, 0x63, 0x5a, 0x0d, 0x3e, 0xa0, 0xdb, 0x9e, 0x07, 0xd7, 0xc1, 0x7c, 0x0f, 0x13, - 0x4b, 0x0b, 0x66, 0x41, 0xc2, 0x66, 0x13, 0x98, 0xb2, 0x3b, 0x76, 0x02, 0x07, 0xfb, 0x4e, 0x4d, - 0x1e, 0x4d, 0x86, 0xdd, 0x4d, 0x03, 0xfa, 0x87, 0x01, 0xca, 0x07, 0xcc, 0x3f, 0x8c, 0xf8, 0x7e, - 0xf8, 0xbf, 0x70, 0xb4, 0x85, 0x60, 0x3e, 0x09, 0x37, 0xcd, 0xc1, 0x1f, 0x0c, 0x50, 0x51, 0x83, - 0x87, 0x1d, 0xfe, 0xa5, 0x25, 0xa1, 0x17, 0x61, 0x71, 0xbc, 0x08, 0x4b, 0xf9, 0x22, 0x5c, 0x94, - 0x3b, 0x46, 0x05, 0x93, 0x86, 0xf8, 0xeb, 0x82, 0x3c, 0xd2, 0x8b, 0x22, 0xa7, 0xd5, 0x77, 0x69, - 0xa0, 0xab, 0xad, 0x8d, 0x38, 0x1e, 0x0e, 0xcb, 0xc8, 0x19, 0x56, 0x7f, 0xba, 0x0a, 0xc3, 0xe9, - 0xba, 0x0b, 0x4a, 0x31, 0xe2, 0x58, 0xc7, 0x7c, 0x5b, 0xd4, 0x8a, 0x3f, 0x3f, 0xab, 0x5d, 0x57, - 0x71, 0x33, 0xef, 0xb1, 0x45, 0x68, 0x23, 0x40, 0xbc, 0x65, 0x7d, 0x1f, 0xfb, 0xc8, 0x3d, 0xdd, - 0xc3, 0xee, 0xe7, 0x9f, 0x6e, 0x00, 0x9d, 0x96, 0x3d, 0xec, 0xda, 0x52, 0xfd, 0x3f, 0xb6, 0x3c, - 0x5e, 0x07, 0xaf, 0x9d, 0x97, 0xa6, 0x34, 0x9f, 0x4f, 0x8a, 0xf2, 0x40, 0x97, 0xde, 0x0b, 0xa8, - 0x47, 0x1e, 0x89, 0xe3, 0xb5, 0x68, 0x98, 0x4b, 0x60, 0x92, 0x13, 0xde, 0xc6, 0xba, 0x2e, 0xa9, - 0x17, 0xb8, 0x06, 0xa6, 0x3d, 0xcc, 0xdc, 0x98, 0x44, 0xb2, 0x99, 0x17, 0xd4, 0x16, 0xe8, 0x1b, - 0xca, 0x94, 0xe4, 0x62, 0xb6, 0x24, 0xa7, 0x8d, 0xb0, 0x94, 0xa3, 0x11, 0x4e, 0x5e, 0xae, 0x11, - 0x4e, 0xe5, 0x68, 0x84, 0x57, 0xce, 0x6b, 0x84, 0xe5, 0xf3, 0x1a, 0x61, 0x65, 0xcc, 0x46, 0x08, - 0xf2, 0x35, 0xc2, 0xe9, 0xfc, 0x8d, 0xf0, 0x26, 0xa8, 0x9d, 0x31, 0x63, 0xbd, 0x42, 0x50, 0x94, - 0x7b, 0x67, 0x37, 0xc6, 0x88, 0xf7, 0xba, 0xcd, 0xb8, 0xb7, 0xb7, 0x95, 0xc1, 0x9d, 0xd1, 0x9b, - 0xcf, 0xf7, 0x41, 0x39, 0xc0, 0x1c, 0x79, 0x88, 0x23, 0x7d, 0xd1, 0x7a, 0x3b, 0xd7, 0x5d, 0x23, - 0xf5, 0x5e, 0x2b, 0xeb, 0x53, 0x7d, 0x4a, 0x06, 0x3f, 0x34, 0xc0, 0x8a, 0x3e, 0xe2, 0x93, 0x9f, - 0xc8, 0xe0, 0x1c, 0x79, 0x23, 0xc1, 0x1c, 0xc7, 0x4c, 0xae, 0x9e, 0xe9, 0xcd, 0xbb, 0x97, 0x32, - 0xb5, 0x9f, 0x61, 0x3b, 0x4a, 0xc9, 0x6c, 0x93, 0x9c, 0x21, 0x81, 0x1d, 0x60, 0xaa, 0xd5, 0xc8, - 0x5a, 0x28, 0x92, 0x07, 0xfa, 0x9e, 0x0b, 0xea, 0x7e, 0xf0, 0xcd, 0x7c, 0x37, 0x2b, 0x41, 0x72, - 0xac, 0x38, 0xfa, 0x0c, 0xbf, 0x12, 0x8d, 0x1c, 0xd7, 0xbd, 0xaf, 0x77, 0x87, 0x7c, 0x47, 0x36, - 0xf2, 0xec, 0x64, 0x26, 0x53, 0x7d, 0xe1, 0x11, 0xa2, 0xfe, 0xb3, 0x92, 0x5c, 0x0b, 0xea, 0xca, - 0x96, 0xae, 0x85, 0xf4, 0x60, 0x61, 0xe4, 0x3a, 0x58, 0x0c, 0x9a, 0x29, 0x0c, 0x9d, 0x54, 0xf6, - 0xc0, 0x42, 0x88, 0x4f, 0x1c, 0x89, 0x76, 0x74, 0x89, 0xbd, 0xb0, 0x41, 0xcc, 0x85, 0xf8, 0xe4, - 0x50, 0x68, 0xe8, 0x61, 0xf8, 0x5e, 0xdf, 0x7a, 0x2a, 0xbd, 0xc4, 0x7a, 0xca, 0xbd, 0x92, 0x26, - 0xff, 0xfb, 0x2b, 0x69, 0xea, 0xcb, 0x5b, 0x49, 0xc3, 0xc7, 0xc1, 0xec, 0x32, 0x48, 0x56, 0xd1, - 0xe6, 0xd3, 0x19, 0x50, 0x3c, 0x60, 0x3e, 0xfc, 0xb9, 0x01, 0x16, 0x86, 0xbf, 0x14, 0x7e, 0x23, - 0x97, 0x6f, 0xa3, 0xbe, 0xb4, 0x55, 0xb7, 0xc7, 0x56, 0x4d, 0x57, 0xf8, 0x6f, 0x0d, 0x50, 0x3d, - 0xe7, 0x0b, 0xdd, 0x4e, 0x5e, 0x0b, 0x67, 0x73, 0x54, 0xdf, 0x7d, 0x79, 0x8e, 0x73, 0xdc, 0xcd, - 0x7c, 0x42, 0x1b, 0xd3, 0xdd, 0x7e, 0x8e, 0x71, 0xdd, 0x1d, 0xf5, 0xdd, 0x09, 0x7e, 0x64, 0x80, - 0xd9, 0xc1, 0x3e, 0x91, 0x97, 0x3e, 0xab, 0x57, 0xfd, 0xf6, 0x78, 0x7a, 0x19, 0x57, 0x06, 0xca, - 0x54, 0x6e, 0x57, 0xb2, 0x7a, 0xf9, 0x5d, 0x19, 0xbd, 0x1f, 0xa4, 0x2b, 0x03, 0x77, 0xb5, 0xdc, - 0xae, 0x64, 0xf5, 0xf2, 0xbb, 0x32, 0xfa, 0xa6, 0x26, 0xea, 0xd7, 0x4c, 0xe6, 0xab, 0xe0, 0xd7, - 0x2e, 0x17, 0x9b, 0xd2, 0xaa, 0xbe, 0x33, 0x8e, 0x56, 0xea, 0x44, 0x00, 0x26, 0xd5, 0xcd, 0x6a, - 0x23, 0x2f, 0x8d, 0x84, 0x57, 0xdf, 0xbe, 0x14, 0x3c, 0x35, 0x17, 0x81, 0x29, 0x7d, 0x89, 0xb1, - 0x2e, 0x41, 0x70, 0xd8, 0xe1, 0xd5, 0x3b, 0x97, 0xc3, 0xa7, 0x16, 0x7f, 0x63, 0x80, 0x95, 0xb3, - 0x2f, 0x15, 0xb9, 0xab, 0xd8, 0x99, 0x14, 0xd5, 0xfd, 0x97, 0xa6, 0x48, 0x7d, 0xfd, 0x85, 0x01, - 0xe0, 0x88, 0x8b, 0xfb, 0x56, 0xee, 0xed, 0x37, 0xa4, 0x5b, 0xdd, 0x19, 0x5f, 0x37, 0x71, 0xab, - 0x3a, 0xf9, 0xd3, 0x2f, 0x9e, 0xdc, 0x32, 0x76, 0xde, 0x7f, 0xfa, 0x7c, 0xd5, 0xf8, 0xec, 0xf9, - 0xaa, 0xf1, 0xb7, 0xe7, 0xab, 0xc6, 0xc7, 0x2f, 0x56, 0x27, 0x3e, 0x7b, 0xb1, 0x3a, 0xf1, 0xa7, - 0x17, 0xab, 0x13, 0x3f, 0xfc, 0x96, 0x4f, 0x78, 0xab, 0xd3, 0xb4, 0x5c, 0x1a, 0xe8, 0xbf, 0xd8, - 0x1a, 0x3d, 0xab, 0x1b, 0xe9, 0x3f, 0x64, 0xdd, 0x3b, 0x8d, 0x0f, 0xb2, 0x7f, 0x93, 0xc9, 0x3f, - 0x04, 0x9a, 0x53, 0xf2, 0x9b, 0xcd, 0x57, 0xff, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xef, 0xbe, 0x07, - 0x52, 0xa2, 0x1c, 0x00, 0x00, + // 2048 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x59, 0x4d, 0x6c, 0x1c, 0x49, + 0x15, 0x76, 0x8f, 0xc7, 0xde, 0x99, 0xf2, 0x7f, 0xd9, 0x59, 0xb7, 0x27, 0x59, 0x8f, 0x33, 0x2c, + 0xbb, 0x56, 0x58, 0xf7, 0x6c, 0x0c, 0x1b, 0x84, 0x09, 0x48, 0xfe, 0x09, 0xc4, 0x0b, 0x8e, 0xbd, + 0xed, 0x90, 0x95, 0x40, 0xa2, 0x55, 0xd3, 0x5d, 0xe9, 0x29, 0x65, 0xba, 0xab, 0xd5, 0x55, 0x33, + 0x8e, 0x39, 0xa1, 0x3d, 0xed, 0x71, 0x91, 0x38, 0x70, 0xdc, 0x03, 0x1c, 0x90, 0x40, 0xca, 0x61, + 0x8f, 0x5c, 0x91, 0x22, 0x71, 0x59, 0xf6, 0x84, 0x10, 0x0a, 0x28, 0x39, 0x2c, 0x17, 0x2e, 0xdc, + 0x38, 0x81, 0xea, 0xa7, 0x7b, 0xa6, 0x67, 0xc6, 0x76, 0x7b, 0x22, 0x40, 0x82, 0xcb, 0xa8, 0xbb, + 0xde, 0xf7, 0xbe, 0xf7, 0x53, 0x55, 0xef, 0x55, 0xf5, 0x80, 0xb7, 0x48, 0xc8, 0x71, 0xec, 0x36, + 0x11, 0x09, 0x1d, 0x86, 0xdd, 0x76, 0x4c, 0xf8, 0x69, 0xdd, 0x75, 0x3b, 0xf5, 0x28, 0xa6, 0x1d, + 0xe2, 0xe1, 0xb8, 0xde, 0xb9, 0x59, 0xe7, 0x8f, 0xad, 0x28, 0xa6, 0x9c, 0xc2, 0x2f, 0x0c, 0x41, + 0x5b, 0xae, 0xdb, 0xb1, 0x12, 0xb4, 0xd5, 0xb9, 0x59, 0x59, 0x40, 0x01, 0x09, 0x69, 0x5d, 0xfe, + 0x2a, 0xbd, 0xca, 0x35, 0x9f, 0x52, 0xbf, 0x85, 0xeb, 0x28, 0x22, 0x75, 0x14, 0x86, 0x94, 0x23, + 0x4e, 0x68, 0xc8, 0xb4, 0xb4, 0xaa, 0xa5, 0xf2, 0xad, 0xd1, 0x7e, 0x58, 0xe7, 0x24, 0xc0, 0x8c, + 0xa3, 0x20, 0xd2, 0x80, 0xd5, 0x7e, 0x80, 0xd7, 0x8e, 0x25, 0x83, 0x96, 0xaf, 0xf4, 0xcb, 0x51, + 0x78, 0xaa, 0x45, 0x4b, 0x3e, 0xf5, 0xa9, 0x7c, 0xac, 0x8b, 0xa7, 0x44, 0xc1, 0xa5, 0x2c, 0xa0, + 0xcc, 0x51, 0x02, 0xf5, 0xa2, 0x45, 0xcb, 0xea, 0xad, 0x1e, 0x30, 0x5f, 0x84, 0x1e, 0x30, 0x3f, + 0xf1, 0x92, 0x34, 0xdc, 0xba, 0x4b, 0x63, 0x5c, 0x77, 0x5b, 0x04, 0x87, 0x5c, 0x48, 0xd5, 0x93, + 0x06, 0x6c, 0xe6, 0x49, 0x65, 0x9a, 0x28, 0xa5, 0x53, 0x17, 0xa4, 0x2d, 0xe2, 0x37, 0xb9, 0xa2, + 0x62, 0x75, 0x8e, 0x43, 0x0f, 0xc7, 0x01, 0x51, 0x06, 0xba, 0x6f, 0x89, 0x17, 0x3d, 0x72, 0x7e, + 0x1a, 0x61, 0x56, 0xc7, 0x82, 0x2f, 0x74, 0xb1, 0x02, 0xd4, 0xfe, 0x61, 0x80, 0xa5, 0x03, 0xe6, + 0x6f, 0x33, 0x46, 0xfc, 0x70, 0x97, 0x86, 0xac, 0x1d, 0xe0, 0xf8, 0x3b, 0xf8, 0x14, 0xbe, 0x06, + 0x4a, 0xca, 0x37, 0xe2, 0x99, 0xc6, 0x9a, 0xb1, 0x5e, 0xde, 0x29, 0x98, 0x86, 0xfd, 0x8a, 0x1c, + 0xdb, 0xf7, 0xe0, 0x57, 0xc1, 0x4c, 0xe2, 0x9b, 0x83, 0x3c, 0x2f, 0x36, 0x0b, 0x12, 0x03, 0xff, + 0xfe, 0xac, 0x3a, 0x7b, 0x8a, 0x82, 0xd6, 0x56, 0x4d, 0x8c, 0x62, 0xc6, 0x6a, 0xf6, 0x74, 0x02, + 0xdc, 0xf6, 0xbc, 0x18, 0x5e, 0x07, 0xd3, 0xae, 0x36, 0xe3, 0x3c, 0xc2, 0xa7, 0xe6, 0xb8, 0xd0, + 0xb3, 0xa7, 0xdc, 0x1e, 0xd3, 0x6f, 0x83, 0x49, 0xe1, 0x0d, 0x8e, 0xcd, 0xa2, 0x24, 0x35, 0x3f, + 0xfb, 0x64, 0x63, 0x49, 0x67, 0x7d, 0x5b, 0xb1, 0x1e, 0xf3, 0x98, 0x84, 0xbe, 0xad, 0x71, 0xb0, + 0x0a, 0x52, 0x02, 0xe1, 0xef, 0x84, 0xe4, 0x04, 0xc9, 0xd0, 0xbe, 0xb7, 0xb5, 0xf8, 0xe1, 0xc7, + 0xd5, 0xb1, 0xbf, 0x7e, 0x5c, 0x1d, 0xfb, 0xe0, 0xf3, 0x27, 0x37, 0xb4, 0x56, 0x6d, 0x15, 0x5c, + 0x1b, 0x16, 0xba, 0x8d, 0x59, 0x44, 0x43, 0x86, 0x6b, 0xcf, 0x0d, 0xf0, 0xda, 0x01, 0xf3, 0x8f, + 0xdb, 0x8d, 0x80, 0xf0, 0x04, 0x70, 0x40, 0x58, 0x03, 0x37, 0x51, 0x87, 0xd0, 0x76, 0x0c, 0x6f, + 0x81, 0x32, 0x93, 0x52, 0x8e, 0x63, 0x9d, 0xa5, 0xb3, 0x9d, 0xed, 0x42, 0xe1, 0x11, 0x98, 0x0e, + 0x7a, 0x78, 0x64, 0xf2, 0xa6, 0x36, 0xdf, 0xb2, 0x48, 0xc3, 0xb5, 0x7a, 0xa7, 0xd7, 0xea, 0x99, + 0xd0, 0xce, 0x4d, 0xab, 0xd7, 0xb6, 0x9d, 0x61, 0xe8, 0xcf, 0xc0, 0xf8, 0x40, 0x06, 0x5e, 0xed, + 0xcd, 0x40, 0xd7, 0x95, 0xda, 0x9b, 0xe0, 0x8b, 0xe7, 0xc6, 0x98, 0x66, 0xe3, 0xf7, 0x85, 0x21, + 0xd9, 0xd8, 0xa3, 0xed, 0x46, 0x0b, 0x3f, 0xa0, 0x9c, 0x84, 0xfe, 0xc8, 0xd9, 0x70, 0xc0, 0xb2, + 0xd7, 0x8e, 0x5a, 0xc4, 0x45, 0x1c, 0x3b, 0x1d, 0xca, 0xb1, 0x93, 0x2c, 0x52, 0x9d, 0x98, 0x37, + 0x7b, 0xf3, 0x20, 0x97, 0xb1, 0xb5, 0x97, 0x28, 0x3c, 0xa0, 0x1c, 0xdf, 0xd1, 0x70, 0xfb, 0x8a, + 0x37, 0x6c, 0x18, 0xfe, 0x10, 0x2c, 0x93, 0xf0, 0x61, 0x8c, 0x5c, 0x51, 0x04, 0x9c, 0x46, 0x8b, + 0xba, 0x8f, 0x9c, 0x26, 0x46, 0x1e, 0x8e, 0x65, 0xa2, 0xa6, 0x36, 0xdf, 0xb8, 0x28, 0xf3, 0x77, + 0x25, 0xda, 0xbe, 0xd2, 0xa5, 0xd9, 0x11, 0x2c, 0x6a, 0xb8, 0x3f, 0xf9, 0xc5, 0x97, 0x4a, 0x7e, + 0x6f, 0x4a, 0xd3, 0xe4, 0xff, 0xdc, 0x00, 0x73, 0x07, 0xcc, 0xff, 0x5e, 0xe4, 0x21, 0x8e, 0x8f, + 0x50, 0x8c, 0x02, 0x26, 0xd2, 0x8d, 0xda, 0xbc, 0x49, 0x45, 0xe1, 0xb8, 0x38, 0xdd, 0x29, 0x14, + 0xee, 0x83, 0xc9, 0x48, 0x32, 0xe8, 0xec, 0x7e, 0xc9, 0xca, 0x51, 0xa6, 0x2d, 0x65, 0x74, 0xa7, + 0xf8, 0xf4, 0x59, 0x75, 0xcc, 0xd6, 0x04, 0x5b, 0xb3, 0x32, 0x9e, 0x94, 0xba, 0xb6, 0x02, 0x96, + 0xfb, 0xbc, 0x4c, 0x23, 0xf8, 0x53, 0x09, 0x2c, 0x1e, 0x30, 0x3f, 0x89, 0x72, 0xdb, 0xf3, 0x88, + 0x48, 0x23, 0x5c, 0xe9, 0xaf, 0x33, 0xdd, 0x1a, 0xf3, 0x6d, 0x30, 0x4b, 0x42, 0xc2, 0x09, 0x6a, + 0x39, 0x4d, 0x2c, 0xe6, 0x46, 0x3b, 0x5c, 0x91, 0xb3, 0x25, 0x6a, 0xab, 0xa5, 0x2b, 0xaa, 0x9c, + 0x21, 0x81, 0xd0, 0xfe, 0xcd, 0x68, 0x3d, 0x35, 0x28, 0x6a, 0x8e, 0x8f, 0x43, 0xcc, 0x08, 0x73, + 0x9a, 0x88, 0x35, 0xe5, 0xa4, 0x4f, 0xdb, 0x53, 0x7a, 0xec, 0x2e, 0x62, 0x4d, 0x31, 0x85, 0x0d, + 0x12, 0xa2, 0xf8, 0x54, 0x21, 0x8a, 0x12, 0x01, 0xd4, 0x90, 0x04, 0xec, 0x02, 0xc0, 0x22, 0x74, + 0x12, 0x3a, 0xa2, 0xdb, 0xc8, 0x0a, 0x23, 0x1c, 0x51, 0x9d, 0xc4, 0x4a, 0x3a, 0x89, 0x75, 0x3f, + 0x69, 0x45, 0x3b, 0x25, 0xe1, 0xc8, 0x47, 0x7f, 0xae, 0x1a, 0x76, 0x59, 0xea, 0x09, 0x09, 0xbc, + 0x07, 0xe6, 0xdb, 0x61, 0x83, 0x86, 0x1e, 0x09, 0x7d, 0x27, 0xc2, 0x31, 0xa1, 0x9e, 0x39, 0x29, + 0xa9, 0x56, 0x06, 0xa8, 0xf6, 0x74, 0xd3, 0x52, 0x4c, 0x3f, 0x13, 0x4c, 0x73, 0xa9, 0xf2, 0x91, + 0xd4, 0x85, 0xef, 0x01, 0xe8, 0xba, 0x1d, 0xe9, 0x12, 0x6d, 0xf3, 0x84, 0xf1, 0x95, 0xfc, 0x8c, + 0xf3, 0xae, 0xdb, 0xb9, 0xaf, 0xb4, 0x35, 0xe5, 0x0f, 0xc0, 0x32, 0x8f, 0x51, 0xc8, 0x1e, 0xe2, + 0xb8, 0x9f, 0xb7, 0x94, 0x9f, 0xf7, 0x4a, 0xc2, 0x91, 0x25, 0xbf, 0x0b, 0xd6, 0xd2, 0x8d, 0x12, + 0x63, 0x8f, 0x30, 0x1e, 0x93, 0x46, 0x5b, 0xee, 0xca, 0x64, 0x5f, 0x99, 0x65, 0xb9, 0x08, 0x56, + 0x13, 0x9c, 0x9d, 0x81, 0x7d, 0x4b, 0xa3, 0xe0, 0x21, 0x78, 0x5d, 0xee, 0x63, 0x26, 0x9c, 0x73, + 0x32, 0x4c, 0xd2, 0x74, 0x40, 0x18, 0x13, 0x6c, 0x60, 0xcd, 0x58, 0x1f, 0xb7, 0xaf, 0x2b, 0xec, + 0x11, 0x8e, 0xf7, 0x7a, 0x90, 0xf7, 0x7b, 0x80, 0x70, 0x03, 0xc0, 0x26, 0x61, 0x9c, 0xc6, 0xc4, + 0x45, 0x2d, 0x07, 0x87, 0x3c, 0x26, 0x98, 0x99, 0x53, 0x52, 0x7d, 0xa1, 0x2b, 0xb9, 0xa3, 0x04, + 0xf0, 0x5d, 0x70, 0xfd, 0x4c, 0xa3, 0x8e, 0xdb, 0x44, 0x61, 0x88, 0x5b, 0xe6, 0xb4, 0x0c, 0xa5, + 0xea, 0x9d, 0x61, 0x73, 0x57, 0xc1, 0xe0, 0x22, 0x98, 0xe0, 0x34, 0x72, 0xee, 0x99, 0x33, 0x6b, + 0xc6, 0xfa, 0x8c, 0x5d, 0xe4, 0x34, 0xba, 0x07, 0xdf, 0x06, 0x4b, 0x1d, 0xd4, 0x22, 0x1e, 0xe2, + 0x34, 0x66, 0x4e, 0x44, 0x4f, 0x70, 0xec, 0xb8, 0x28, 0x32, 0x67, 0x25, 0x06, 0x76, 0x65, 0x47, + 0x42, 0xb4, 0x8b, 0x22, 0x78, 0x03, 0x2c, 0xa4, 0xa3, 0x0e, 0xc3, 0x5c, 0xc2, 0xe7, 0x24, 0x7c, + 0x2e, 0x15, 0x1c, 0x63, 0x2e, 0xb0, 0xd7, 0x40, 0x19, 0xb5, 0x5a, 0xf4, 0xa4, 0x45, 0x18, 0x37, + 0xe7, 0xd7, 0xc6, 0xd7, 0xcb, 0x76, 0x77, 0x00, 0x56, 0x40, 0xc9, 0xc3, 0xe1, 0xa9, 0x14, 0x2e, + 0x48, 0x61, 0xfa, 0x9e, 0xad, 0x3a, 0x30, 0x7f, 0xd5, 0xb9, 0x0a, 0xca, 0x81, 0xa8, 0x2f, 0x1c, + 0x3d, 0xc2, 0xe6, 0xe2, 0x9a, 0xb1, 0x5e, 0xb4, 0x4b, 0x01, 0x09, 0x8f, 0xc5, 0x3b, 0xb4, 0xc0, + 0xa2, 0xb4, 0xee, 0x90, 0x50, 0xcc, 0x6f, 0x07, 0x3b, 0x1d, 0xd4, 0x62, 0xe6, 0xd2, 0x9a, 0xb1, + 0x5e, 0xb2, 0x17, 0xa4, 0x68, 0x5f, 0x4b, 0x1e, 0xa0, 0x16, 0xdb, 0x9a, 0xcf, 0xd6, 0x1d, 0xd3, + 0xa8, 0xfd, 0xc6, 0x00, 0xb0, 0xa7, 0xbc, 0xd8, 0x38, 0xa0, 0x1d, 0xd4, 0x3a, 0xaf, 0xba, 0x6c, + 0x83, 0x32, 0x13, 0x69, 0x97, 0xfb, 0xb9, 0x70, 0x89, 0xfd, 0x5c, 0x12, 0x6a, 0x72, 0x3b, 0x67, + 0x72, 0x31, 0x9e, 0x3b, 0x17, 0x43, 0xdc, 0x8f, 0xc0, 0xc2, 0x01, 0xf3, 0xa5, 0xd7, 0x38, 0x89, + 0xa1, 0xbf, 0xad, 0x18, 0xfd, 0x6d, 0x05, 0x5a, 0x60, 0x82, 0x9e, 0x88, 0x73, 0x52, 0xe1, 0x02, + 0xdb, 0x0a, 0xb6, 0x05, 0x84, 0x5d, 0xf5, 0x5c, 0xbb, 0x0a, 0x56, 0x06, 0x2c, 0xa6, 0xc5, 0xfa, + 0xd7, 0x06, 0xb8, 0x22, 0xb2, 0xd9, 0x44, 0xa1, 0x8f, 0x6d, 0x7c, 0x82, 0x62, 0x6f, 0x0f, 0x87, + 0x34, 0x60, 0xb0, 0x06, 0x66, 0x3c, 0xf9, 0xe4, 0x70, 0x2a, 0x0e, 0x7e, 0xa6, 0x21, 0xd7, 0xc7, + 0x94, 0x1a, 0xbc, 0x4f, 0xb7, 0x3d, 0x0f, 0xae, 0x83, 0xf9, 0x2e, 0x26, 0x96, 0x16, 0xcc, 0x82, + 0x84, 0xcd, 0x26, 0x30, 0x65, 0x77, 0xe4, 0x04, 0xf6, 0xf7, 0x9d, 0xaa, 0x3c, 0x9a, 0x0c, 0xba, + 0x9b, 0x06, 0xf4, 0x37, 0x03, 0x94, 0x0e, 0x98, 0x7f, 0x18, 0xf1, 0xfd, 0xf0, 0xff, 0xe1, 0x68, + 0x0b, 0xc1, 0x7c, 0x12, 0x6e, 0x9a, 0x83, 0xdf, 0x19, 0xa0, 0xac, 0x06, 0x0f, 0xdb, 0xfc, 0xdf, + 0x96, 0x84, 0x6e, 0x84, 0xe3, 0xa3, 0x45, 0x58, 0xcc, 0x17, 0xe1, 0xa2, 0xdc, 0x31, 0x2a, 0x98, + 0x34, 0xc4, 0x5f, 0x14, 0xe4, 0x91, 0x5e, 0x14, 0x39, 0xad, 0xbe, 0x4b, 0x03, 0x5d, 0x6d, 0x6d, + 0xc4, 0xf1, 0x60, 0x58, 0x46, 0xce, 0xb0, 0x7a, 0xd3, 0x55, 0x18, 0x4c, 0xd7, 0x1d, 0x50, 0x8c, + 0x11, 0xc7, 0x3a, 0xe6, 0x9b, 0xa2, 0x56, 0xfc, 0xf1, 0x59, 0xf5, 0xaa, 0x8a, 0x9b, 0x79, 0x8f, + 0x2c, 0x42, 0xeb, 0x01, 0xe2, 0x4d, 0xeb, 0xbb, 0xd8, 0x47, 0xee, 0xe9, 0x1e, 0x76, 0x3f, 0xfb, + 0x64, 0x03, 0xe8, 0xb4, 0xec, 0x61, 0xd7, 0x96, 0xea, 0xff, 0xb1, 0xe5, 0xf1, 0x06, 0x78, 0xfd, + 0xbc, 0x34, 0xa5, 0xf9, 0x7c, 0x32, 0x2e, 0x0f, 0x74, 0xe9, 0xbd, 0x80, 0x7a, 0xe4, 0xa1, 0x38, + 0x5e, 0x8b, 0x86, 0xb9, 0x04, 0x26, 0x38, 0xe1, 0x2d, 0xac, 0xeb, 0x92, 0x7a, 0x81, 0x6b, 0x60, + 0xca, 0xc3, 0xcc, 0x8d, 0x49, 0x24, 0x9b, 0x79, 0x41, 0x6d, 0x81, 0x9e, 0xa1, 0x4c, 0x49, 0x1e, + 0xcf, 0x96, 0xe4, 0xb4, 0x11, 0x16, 0x73, 0x34, 0xc2, 0x89, 0xcb, 0x35, 0xc2, 0xc9, 0x1c, 0x8d, + 0xf0, 0x95, 0xf3, 0x1a, 0x61, 0xe9, 0xbc, 0x46, 0x58, 0x1e, 0xb1, 0x11, 0x82, 0x7c, 0x8d, 0x70, + 0x2a, 0x7f, 0x23, 0xbc, 0x0e, 0xaa, 0x67, 0xcc, 0x58, 0x3a, 0xab, 0xbf, 0x2d, 0xca, 0xbd, 0xb3, + 0x1b, 0x63, 0xc4, 0xbb, 0xdd, 0x66, 0xd4, 0xdb, 0xdb, 0x4a, 0xff, 0xce, 0xe8, 0xce, 0xe7, 0xfb, + 0xa0, 0x14, 0x60, 0x8e, 0x3c, 0xc4, 0x91, 0xbe, 0x68, 0xbd, 0x93, 0xeb, 0xae, 0x91, 0x7a, 0xaf, + 0x95, 0xf5, 0xa9, 0x3e, 0x25, 0x83, 0x1f, 0x18, 0x60, 0x45, 0x1f, 0xf1, 0xc9, 0x8f, 0x64, 0x70, + 0x8e, 0xbc, 0x91, 0x60, 0x8e, 0x63, 0x26, 0x57, 0xcf, 0xd4, 0xe6, 0x9d, 0x4b, 0x99, 0xda, 0xcf, + 0xb0, 0x1d, 0xa5, 0x64, 0xb6, 0x49, 0xce, 0x90, 0xc0, 0x36, 0x30, 0xd5, 0x6a, 0x64, 0x4d, 0x14, + 0xc9, 0x03, 0x7d, 0xd7, 0x05, 0x75, 0x3f, 0xf8, 0x7a, 0xbe, 0x9b, 0x95, 0x20, 0x39, 0x56, 0x1c, + 0x3d, 0x86, 0x5f, 0x8d, 0x86, 0x8e, 0xc3, 0xc7, 0x60, 0x25, 0x5d, 0xa0, 0xd8, 0x73, 0x62, 0xd9, + 0xee, 0x1c, 0xd5, 0x58, 0xf5, 0xd1, 0xff, 0x76, 0x2e, 0xbb, 0xdb, 0x5d, 0x96, 0x4c, 0xcf, 0x5c, + 0x46, 0xc3, 0x05, 0xba, 0xeb, 0x76, 0x6f, 0xaf, 0xb7, 0xe5, 0x11, 0x22, 0xbb, 0x8c, 0x92, 0x45, + 0x76, 0xe1, 0xe1, 0xa5, 0xf6, 0x4f, 0xb5, 0x0a, 0xd5, 0x65, 0x31, 0x5d, 0x85, 0xe9, 0x91, 0xc6, + 0xc8, 0x75, 0xa4, 0xe9, 0x37, 0x53, 0x18, 0x38, 0x23, 0xed, 0x81, 0x85, 0x10, 0x9f, 0x38, 0x12, + 0xed, 0xe8, 0xe2, 0x7e, 0x61, 0x6b, 0x9a, 0x0b, 0xf1, 0xc9, 0xa1, 0xd0, 0xd0, 0xc3, 0xf0, 0xbd, + 0x9e, 0x95, 0x5c, 0x7c, 0x89, 0x95, 0x9c, 0x7b, 0x0d, 0x4f, 0xfc, 0xf7, 0xd7, 0xf0, 0xe4, 0xff, + 0xe2, 0x1a, 0x1e, 0x3c, 0x02, 0x67, 0x17, 0x60, 0xb2, 0x7e, 0x37, 0x9f, 0x4e, 0x83, 0xf1, 0x03, + 0xe6, 0xc3, 0x9f, 0x18, 0x60, 0x61, 0xf0, 0xeb, 0xe8, 0xd7, 0x72, 0x79, 0x37, 0xec, 0xeb, 0x62, + 0x65, 0x7b, 0x64, 0xd5, 0x74, 0x6f, 0xfd, 0xca, 0x00, 0x95, 0x73, 0xbe, 0x4a, 0xee, 0xe4, 0xb5, + 0x70, 0x36, 0x47, 0xe5, 0xdd, 0x97, 0xe7, 0x38, 0xc7, 0xdd, 0xcc, 0x67, 0xc3, 0x11, 0xdd, 0xed, + 0xe5, 0x18, 0xd5, 0xdd, 0x61, 0xdf, 0xda, 0xe0, 0x87, 0x06, 0x98, 0xed, 0xef, 0x8d, 0x79, 0xe9, + 0xb3, 0x7a, 0x95, 0x6f, 0x8e, 0xa6, 0x97, 0x71, 0xa5, 0xaf, 0x40, 0xe6, 0x76, 0x25, 0xab, 0x97, + 0xdf, 0x95, 0xe1, 0xfb, 0x41, 0xba, 0xd2, 0x77, 0x3f, 0xcd, 0xed, 0x4a, 0x56, 0x2f, 0xbf, 0x2b, + 0xc3, 0x6f, 0xa7, 0xa2, 0x72, 0x4e, 0x67, 0xbe, 0x84, 0x7e, 0xe5, 0x72, 0xb1, 0x29, 0xad, 0xca, + 0xed, 0x51, 0xb4, 0x52, 0x27, 0x02, 0x30, 0xa1, 0x6e, 0x93, 0x1b, 0x79, 0x69, 0x24, 0xbc, 0xf2, + 0xce, 0xa5, 0xe0, 0xa9, 0xb9, 0x08, 0x4c, 0xea, 0x8b, 0x9b, 0x75, 0x09, 0x82, 0xc3, 0x36, 0xaf, + 0xdc, 0xba, 0x1c, 0x3e, 0xb5, 0xf8, 0x4b, 0x03, 0xac, 0x9c, 0x7d, 0x91, 0xca, 0x5d, 0xc5, 0xce, + 0xa4, 0xa8, 0xec, 0xbf, 0x34, 0x45, 0xea, 0xeb, 0x4f, 0x0d, 0x00, 0x87, 0x7c, 0xac, 0xd8, 0xca, + 0xbd, 0xfd, 0x06, 0x74, 0x2b, 0x3b, 0xa3, 0xeb, 0x26, 0x6e, 0x55, 0x26, 0x7e, 0xfc, 0xf9, 0x93, + 0x1b, 0xc6, 0xce, 0xfb, 0x4f, 0x9f, 0xaf, 0x1a, 0x9f, 0x3e, 0x5f, 0x35, 0xfe, 0xf2, 0x7c, 0xd5, + 0xf8, 0xe8, 0xc5, 0xea, 0xd8, 0xa7, 0x2f, 0x56, 0xc7, 0xfe, 0xf0, 0x62, 0x75, 0xec, 0xfb, 0xdf, + 0xf0, 0x09, 0x6f, 0xb6, 0x1b, 0x96, 0x4b, 0x03, 0xfd, 0xb7, 0x62, 0xbd, 0x6b, 0x75, 0x23, 0xfd, + 0x57, 0xb0, 0x73, 0xab, 0xfe, 0x38, 0xfb, 0xd7, 0xa0, 0xfc, 0x13, 0xa4, 0x31, 0x29, 0xbf, 0x53, + 0x7d, 0xf9, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xbd, 0x07, 0x20, 0x8f, 0x96, 0x1d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3214,6 +3233,18 @@ func (m *MsgCreateConsumer) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.AllowlistedRewardDenoms != nil { + { + size, err := m.AllowlistedRewardDenoms.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } if m.PowerShapingParameters != nil { { size, err := m.PowerShapingParameters.MarshalToSizedBuffer(dAtA[:i]) @@ -3315,6 +3346,18 @@ func (m *MsgUpdateConsumer) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.AllowlistedRewardDenoms != nil { + { + size, err := m.AllowlistedRewardDenoms.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } if m.PowerShapingParameters != nil { { size, err := m.PowerShapingParameters.MarshalToSizedBuffer(dAtA[:i]) @@ -3883,6 +3926,10 @@ func (m *MsgCreateConsumer) Size() (n int) { l = m.PowerShapingParameters.Size() n += 1 + l + sovTx(uint64(l)) } + if m.AllowlistedRewardDenoms != nil { + l = m.AllowlistedRewardDenoms.Size() + n += 1 + l + sovTx(uint64(l)) + } return n } @@ -3929,6 +3976,10 @@ func (m *MsgUpdateConsumer) Size() (n int) { l = m.PowerShapingParameters.Size() n += 1 + l + sovTx(uint64(l)) } + if m.AllowlistedRewardDenoms != nil { + l = m.AllowlistedRewardDenoms.Size() + n += 1 + l + sovTx(uint64(l)) + } return n } @@ -7260,6 +7311,42 @@ func (m *MsgCreateConsumer) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowlistedRewardDenoms", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AllowlistedRewardDenoms == nil { + m.AllowlistedRewardDenoms = &AllowlistedRewardDenoms{} + } + if err := m.AllowlistedRewardDenoms.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -7596,6 +7683,42 @@ func (m *MsgUpdateConsumer) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowlistedRewardDenoms", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AllowlistedRewardDenoms == nil { + m.AllowlistedRewardDenoms = &AllowlistedRewardDenoms{} + } + if err := m.AllowlistedRewardDenoms.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:])