diff --git a/proto/interchain_security/ccv/provider/v1/query.proto b/proto/interchain_security/ccv/provider/v1/query.proto index c9536b8e16..d0e1862a6f 100644 --- a/proto/interchain_security/ccv/provider/v1/query.proto +++ b/proto/interchain_security/ccv/provider/v1/query.proto @@ -35,20 +35,36 @@ service Query { "/interchain_security/ccv/provider/consumer_chains"; } + // [DEPRECATED]: Use `QueryConsumersThatAreAboutToStart` instead // QueryConsumerChainStarts queries consumer chain start proposals. rpc QueryConsumerChainStarts(QueryConsumerChainStartProposalsRequest) returns (QueryConsumerChainStartProposalsResponse) { + option deprecated = true; option (google.api.http).get = "/interchain_security/ccv/provider/consumer_chain_start_proposals"; } + rpc QueryConsumersThatAreAboutToStart(QueryConsumersThatAreAboutToStartRequest) + returns (QueryConsumersThatAreAboutToStartResponse) { + option (google.api.http).get = + "/interchain_security/ccv/provider/consumers_that_are_about_to_start"; + } + + // [DEPRECATED]: Use `QueryConsumersThatAreAboutToStop` instead // QueryConsumerChainStops queries consumer chain stop proposals. rpc QueryConsumerChainStops(QueryConsumerChainStopProposalsRequest) returns (QueryConsumerChainStopProposalsResponse) { + option deprecated = true; option (google.api.http).get = "/interchain_security/ccv/provider/consumer_chain_stop_proposals"; } + rpc QueryConsumersThatAreAboutToStop(QueryConsumersThatAreAboutToStopRequest) + returns (QueryConsumersThatAreAboutToStopResponse) { + option (google.api.http).get = + "/interchain_security/ccv/provider/consumers_that_are_about_to_stop"; + } + // QueryValidatorConsumerAddr queries the address // assigned by a validator for a consumer chain. rpc QueryValidatorConsumerAddr(QueryValidatorConsumerAddrRequest) @@ -195,18 +211,35 @@ message QueryConsumerChainsRequest {} message QueryConsumerChainsResponse { repeated Chain chains = 1; } +// [DEPRECATED] use `QueryConsumersThatAreAboutToStartRequest` instead message QueryConsumerChainStartProposalsRequest {} +// [DEPRECATED] use `QueryConsumersThatAreAboutToStartResponse` instead message QueryConsumerChainStartProposalsResponse { - ConsumerAdditionProposals proposals = 1; + ConsumerAdditionProposals proposals = 1 [deprecated = true]; } +message QueryConsumersThatAreAboutToStartRequest {} + +message QueryConsumersThatAreAboutToStartResponse { + repeated string consumer_ids = 1; +} + +// [DEPRECATED] use `QueryConsumersThatAreAboutToStopRequest` instead message QueryConsumerChainStopProposalsRequest {} +// [DEPRECATED] use `QueryConsumersThatAreAboutToStopResponse` instead message QueryConsumerChainStopProposalsResponse { - ConsumerRemovalProposals proposals = 1; + ConsumerRemovalProposals proposals = 1 [deprecated = true]; +} + +message QueryConsumersThatAreAboutToStopRequest {} + +message QueryConsumersThatAreAboutToStopResponse { + repeated string consumer_ids = 1; } + message Chain { string chain_id = 1; string client_id = 2; diff --git a/tests/integration/provider_gov_hooks.go b/tests/integration/provider_gov_hooks.go index 0890436781..cdf7ca12b7 100644 --- a/tests/integration/provider_gov_hooks.go +++ b/tests/integration/provider_gov_hooks.go @@ -13,57 +13,6 @@ import ( testkeeper "github.com/cosmos/interchain-security/v5/testutil/keeper" ) -// TestAfterPropSubmissionAndVotingPeriodEnded tests AfterProposalSubmission and AfterProposalVotingPeriodEnded hooks -// require adding a proposal in the gov module and registering a consumer chain with the provider module -func (s *CCVTestSuite) TestAfterPropSubmissionAndVotingPeriodEnded() { - ctx := s.providerChain.GetContext() - providerKeeper := s.providerApp.GetProviderKeeper() - govKeeper := s.providerApp.GetTestGovKeeper() - proposer := s.providerChain.SenderAccount - - msgUpdateConsumer := testkeeper.GetTestMsgUpdateConsumer() - - proposal, err := v1.NewProposal([]sdk.Msg{&msgUpdateConsumer}, 1, time.Now(), time.Now().Add(1*time.Hour), "metadata", "title", "summary", proposer.GetAddress(), false) - s.Require().NoError(err) - - err = govKeeper.SetProposal(ctx, proposal) - s.Require().NoError(err) - - // the proposal can only be submitted if the owner of the chain is the gov module - providerKeeper.SetConsumerOwnerAddress(ctx, msgUpdateConsumer.ConsumerId, "some bogus address") - - err = providerKeeper.Hooks().AfterProposalSubmission(ctx, proposal.Id) - s.Require().Error(err) - - // the proposal can only be submitted if the owner of the chain is the gov module - govModuleAddress := "cosmos10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn" - providerKeeper.SetConsumerOwnerAddress(ctx, msgUpdateConsumer.ConsumerId, govModuleAddress) - - err = providerKeeper.Hooks().AfterProposalSubmission(ctx, proposal.Id) - s.Require().NoError(err) - - // verify that the proposal id is created - consumerIdOnProvider, ok := providerKeeper.GetProposalIdToConsumerId(ctx, proposal.Id) - s.Require().True(ok) - s.Require().NotEmpty(consumerIdOnProvider) - s.Require().Equal(msgUpdateConsumer.ConsumerId, consumerIdOnProvider) - - providerKeeper.Hooks().AfterProposalVotingPeriodEnded(ctx, proposal.Id) - // verify that the proposal id is deleted - s.Require().Empty(providerKeeper.GetProposalIdToConsumerId(ctx, proposal.Id)) - - // assert that a proposal with more than one `MsgUpdateConsumer` messages fails - proposal, err = v1.NewProposal([]sdk.Msg{&msgUpdateConsumer, &msgUpdateConsumer}, 1, time.Now(), time.Now().Add(1*time.Hour), "metadata", "title", "summary", proposer.GetAddress(), false) - s.Require().NoError(err) - - err = govKeeper.SetProposal(ctx, proposal) - s.Require().NoError(err) - - err = providerKeeper.Hooks().AfterProposalSubmission(ctx, proposal.Id) - s.Require().Error(err) - -} - func (s *CCVTestSuite) TestGetConsumerAdditionFromProp() { ctx := s.providerChain.GetContext() proposer := s.providerChain.SenderAccount diff --git a/x/ccv/provider/client/cli/query.go b/x/ccv/provider/client/cli/query.go index 34d715583c..06bce5ee8d 100644 --- a/x/ccv/provider/client/cli/query.go +++ b/x/ccv/provider/client/cli/query.go @@ -27,7 +27,9 @@ func NewQueryCmd() *cobra.Command { cmd.AddCommand(CmdConsumerGenesis()) cmd.AddCommand(CmdConsumerChains()) cmd.AddCommand(CmdConsumerStartProposals()) + cmd.AddCommand(CmdListConsumersThatAreAboutToStart()) cmd.AddCommand(CmdConsumerStopProposals()) + cmd.AddCommand(CmdListConsumersThatAreAboutToStop()) cmd.AddCommand(CmdConsumerValidatorKeyAssignment()) cmd.AddCommand(CmdProviderValidatorKey()) cmd.AddCommand(CmdThrottleState()) @@ -103,8 +105,10 @@ func CmdConsumerChains() *cobra.Command { func CmdProposedConsumerChains() *cobra.Command { cmd := &cobra.Command{ Use: "list-proposed-consumer-chains", - Short: "Query chainIDs in consumer addition proposal before voting finishes", - Args: cobra.ExactArgs(0), + Short: "Query consumer chains that currently try to join ICS through governance", + Long: `Query to retrieve all the consumer ids of MsgUpdateConsumer messages that currently reside in active + proposals.`, + Args: cobra.ExactArgs(0), RunE: func(cmd *cobra.Command, args []string) (err error) { clientCtx, err := client.GetClientQueryContext(cmd) if err != nil { @@ -130,12 +134,8 @@ func CmdProposedConsumerChains() *cobra.Command { func CmdConsumerStartProposals() *cobra.Command { cmd := &cobra.Command{ Use: "list-start-proposals", - Short: "Query consumer chains start proposals on provider chain.", - Long: `Query mature and pending consumer chains start proposals on provider chain. - Matured proposals will be executed on the next block - their spawn_time has passed - Pending proposals are waiting for their spawn_time to pass. - `, - Args: cobra.ExactArgs(0), + Short: "DEPRECATED! Use `list-consumers-that-will-start` instead.", + Args: cobra.ExactArgs(0), RunE: func(cmd *cobra.Command, args []string) (err error) { clientCtx, err := client.GetClientQueryContext(cmd) if err != nil { @@ -158,15 +158,38 @@ func CmdConsumerStartProposals() *cobra.Command { return cmd } +func CmdListConsumersThatAreAboutToStart() *cobra.Command { + cmd := &cobra.Command{ + Use: "list-consumers-that-will-start", + Short: "Query all the consumer chains that are initialized and about to start.", + Args: cobra.ExactArgs(0), + RunE: func(cmd *cobra.Command, args []string) (err error) { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + req := &types.QueryConsumersThatAreAboutToStartRequest{} + res, err := queryClient.QueryConsumersThatAreAboutToStart(cmd.Context(), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + func CmdConsumerStopProposals() *cobra.Command { cmd := &cobra.Command{ Use: "list-stop-proposals", - Short: "Query consumer chains stop proposals on provider chain.", - Long: `Query mature and pending consumer chains stop proposals on provider chain. - Matured proposals will be executed on the next block - their stop_time has passed - Pending proposals are waiting for their stop_time to pass. - `, - Args: cobra.ExactArgs(0), + Short: "DEPRECATED! Use `list-consumers-that-will-stop` instead.", + Args: cobra.ExactArgs(0), RunE: func(cmd *cobra.Command, args []string) (err error) { clientCtx, err := client.GetClientQueryContext(cmd) if err != nil { @@ -189,6 +212,33 @@ func CmdConsumerStopProposals() *cobra.Command { return cmd } +func CmdListConsumersThatAreAboutToStop() *cobra.Command { + cmd := &cobra.Command{ + Use: "list-consumers-that-will-stop", + Short: "Query all the consumer chains that are launched and about to stop.", + Args: cobra.ExactArgs(0), + RunE: func(cmd *cobra.Command, args []string) (err error) { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + req := &types.QueryConsumersThatAreAboutToStopRequest{} + res, err := queryClient.QueryConsumersThatAreAboutToStop(cmd.Context(), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + // TODO: fix naming func CmdConsumerValidatorKeyAssignment() *cobra.Command { bech32PrefixConsAddr := sdk.GetConfig().GetBech32ConsensusAddrPrefix() diff --git a/x/ccv/provider/keeper/genesis.go b/x/ccv/provider/keeper/genesis.go index 2e58a718a4..277e89120b 100644 --- a/x/ccv/provider/keeper/genesis.go +++ b/x/ccv/provider/keeper/genesis.go @@ -179,8 +179,6 @@ func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { k.GetValidatorSetUpdateId(ctx), k.GetAllValsetUpdateBlockHeights(ctx), consumerStates, - k.GetAllPendingConsumerAdditionProps(ctx), - k.GetAllPendingConsumerRemovalProps(ctx), params, k.GetAllValidatorConsumerPubKeys(ctx, nil), k.GetAllValidatorsByConsumerAddr(ctx, nil), diff --git a/x/ccv/provider/keeper/genesis_test.go b/x/ccv/provider/keeper/genesis_test.go index 8f305f1197..3f3ec2d240 100644 --- a/x/ccv/provider/keeper/genesis_test.go +++ b/x/ccv/provider/keeper/genesis_test.go @@ -62,14 +62,6 @@ func TestInitAndExportGenesis(t *testing.T) { nil, ), }, - []providertypes.ConsumerAdditionProposal{{ - ChainId: cChainIDs[0], - SpawnTime: oneHourFromNow, - }}, - []providertypes.ConsumerRemovalProposal{{ - ChainId: cChainIDs[0], - StopTime: oneHourFromNow, - }}, params, []providertypes.ValidatorConsumerPubKey{ { @@ -139,10 +131,6 @@ func TestInitAndExportGenesis(t *testing.T) { height, found := pk.GetValsetUpdateBlockHeight(ctx, vscID) require.True(t, found) require.Equal(t, initHeight, height) - addProp, found := pk.GetPendingConsumerAdditionProp(ctx, oneHourFromNow, cChainIDs[0]) - require.True(t, found) - require.Equal(t, provGenesis.ConsumerAdditionProposals[0], addProp) - require.True(t, pk.PendingConsumerRemovalPropExists(ctx, cChainIDs[0], oneHourFromNow)) require.Equal(t, provGenesis.Params, pk.GetParams(ctx)) providerConsensusValSet, err := pk.GetLastProviderConsensusValSet(ctx) diff --git a/x/ccv/provider/keeper/grpc_query.go b/x/ccv/provider/keeper/grpc_query.go index b70feef953..0edbfa0eee 100644 --- a/x/ccv/provider/keeper/grpc_query.go +++ b/x/ccv/provider/keeper/grpc_query.go @@ -3,6 +3,8 @@ package keeper import ( "context" "fmt" + govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + "math" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -105,39 +107,34 @@ func (k Keeper) GetConsumerChain(ctx sdk.Context, consumerId string) (types.Chai }, nil } -// TODO (PERMISSIONLESS) func (k Keeper) QueryConsumerChainStarts(goCtx context.Context, req *types.QueryConsumerChainStartProposalsRequest) (*types.QueryConsumerChainStartProposalsResponse, error) { + return nil, status.Error(codes.Unimplemented, "This query is not supported anymore. Use `QueryConsumersThatAreAboutToStart` instead") +} + +func (k Keeper) QueryConsumersThatAreAboutToStart(goCtx context.Context, req *types.QueryConsumersThatAreAboutToStartRequest) (*types.QueryConsumersThatAreAboutToStartResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } ctx := sdk.UnwrapSDKContext(goCtx) - var props []*types.ConsumerAdditionProposal - for _, prop := range k.GetAllPendingConsumerAdditionProps(ctx) { - // prevent implicit memory aliasing - p := prop - props = append(props, &p) - } - - return &types.QueryConsumerChainStartProposalsResponse{Proposals: &types.ConsumerAdditionProposals{Pending: props}}, nil + consumerIds := k.GetInitializedConsumersReadyToLaunch(ctx, math.MaxUint32) + return &types.QueryConsumersThatAreAboutToStartResponse{ConsumerIds: consumerIds}, nil } -// TODO (PERMISSIONLESS) func (k Keeper) QueryConsumerChainStops(goCtx context.Context, req *types.QueryConsumerChainStopProposalsRequest) (*types.QueryConsumerChainStopProposalsResponse, error) { + return nil, status.Error(codes.Unimplemented, "This query is not supported anymore. Use `QueryConsumersThatAreAboutToStop` instead") +} + +func (k Keeper) QueryConsumersThatAreAboutToStop(goCtx context.Context, req *types.QueryConsumersThatAreAboutToStopRequest) (*types.QueryConsumersThatAreAboutToStopResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } ctx := sdk.UnwrapSDKContext(goCtx) - var props []*types.ConsumerRemovalProposal - for _, prop := range k.GetAllPendingConsumerRemovalProps(ctx) { - // prevent implicit memory aliasing - p := prop - props = append(props, &p) - } - return &types.QueryConsumerChainStopProposalsResponse{Proposals: &types.ConsumerRemovalProposals{Pending: props}}, nil + consumerIds := k.GetLaunchedConsumersReadyToStop(ctx, math.MaxUint32) + return &types.QueryConsumersThatAreAboutToStopResponse{ConsumerIds: consumerIds}, nil } func (k Keeper) QueryValidatorConsumerAddr(goCtx context.Context, req *types.QueryValidatorConsumerAddrRequest) (*types.QueryValidatorConsumerAddrResponse, error) { @@ -232,7 +229,6 @@ func (k Keeper) QueryRegisteredConsumerRewardDenoms(goCtx context.Context, req * }, nil } -// TODO (PERMISSIONLESS) func (k Keeper) QueryProposedConsumerChainIDs(goCtx context.Context, req *types.QueryProposedChainIDsRequest) (*types.QueryProposedChainIDsResponse, error) { if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") @@ -240,10 +236,33 @@ func (k Keeper) QueryProposedConsumerChainIDs(goCtx context.Context, req *types. ctx := sdk.UnwrapSDKContext(goCtx) - chains := k.GetAllProposedConsumerChainIDs(ctx) + var proposals []govv1.Proposal + err := k.govKeeper.Proposals.Walk(ctx, nil, func(proposalId uint64, proposal govv1.Proposal) (stop bool, err error) { + proposals = append(proposals, proposal) + return false, nil + }) + if err != nil { + return nil, status.Error(codes.Internal, "failed to retrieve proposals") + } + + var proposedChains []types.ProposedChain + for _, proposal := range proposals { + status := proposal.Status + if status != govv1.ProposalStatus_PROPOSAL_STATUS_DEPOSIT_PERIOD && status != govv1.ProposalStatus_PROPOSAL_STATUS_VOTING_PERIOD { + // we only care about active proposals + continue + } + + messages := proposal.GetMessages() + for _, msg := range messages { + if sdkMsg, isMsgUpdateConsumer := msg.GetCachedValue().(*types.MsgUpdateConsumer); isMsgUpdateConsumer { + proposedChains = append(proposedChains, types.ProposedChain{ProposalID: proposal.Id, ConsumerId: sdkMsg.ConsumerId}) + } + } + } return &types.QueryProposedChainIDsResponse{ - ProposedChains: chains, + ProposedChains: proposedChains, }, nil } diff --git a/x/ccv/provider/keeper/grpc_query_test.go b/x/ccv/provider/keeper/grpc_query_test.go index bbc61794d8..2b1d10015a 100644 --- a/x/ccv/provider/keeper/grpc_query_test.go +++ b/x/ccv/provider/keeper/grpc_query_test.go @@ -384,3 +384,7 @@ func TestQueryConsumerIdFromClientId(t *testing.T) { require.NoError(t, err) require.Equal(t, expectedConsumerId, res.ConsumerId) } + +func TestQueryProposedConsumerChainIDs(t *testing.T) { + // TODO (PERMISSIONLESS) +} diff --git a/x/ccv/provider/keeper/hooks.go b/x/ccv/provider/keeper/hooks.go index 621be7f2a7..f63eb54bfe 100644 --- a/x/ccv/provider/keeper/hooks.go +++ b/x/ccv/provider/keeper/hooks.go @@ -2,8 +2,6 @@ package keeper import ( "context" - "fmt" - "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" sdkgov "github.com/cosmos/cosmos-sdk/x/gov/types" @@ -106,79 +104,11 @@ func (h Hooks) BeforeTokenizeShareRecordRemoved(_ context.Context, _ uint64) err // gov hooks // -// AfterProposalSubmission - call hook if registered -// If an update consumer message exists in the proposal, a record is created that maps the proposal id to the consumer id -// TODO (PERMISSIONLESS) func (h Hooks) AfterProposalSubmission(goCtx context.Context, proposalId uint64) error { - ctx := sdk.UnwrapSDKContext(goCtx) - - p, err := h.k.govKeeper.Proposals.Get(ctx, proposalId) - if err != nil { - return fmt.Errorf("cannot retrieve proposal with id: %d", proposalId) - } - - hasUpdateConsumerMsg := false - for _, msg := range p.GetMessages() { - sdkMsg, isMsgUpdateConsumer := msg.GetCachedValue().(*providertypes.MsgUpdateConsumer) - if isMsgUpdateConsumer { - // A `MsgUpdateConsumer` can only succeed if the owner of the consumer chain is the gov module. - // If that's not the case, we immediately fail the proposal. - // Note that someone could potentially change the owner of a chain to be that of the gov module - // while a proposal is active and before the proposal is executed. Even then, we still do not allow - // `MsgUpdateConsumer` proposals if the owner of the chain is not the gov module to avoid someone forgetting - // to change the owner address while the proposal is active. - ownerAddress, err := h.k.GetConsumerOwnerAddress(ctx, sdkMsg.ConsumerId) - if err != nil { - return fmt.Errorf("cannot find owner address for consumer with consumer id (%s): %s", sdkMsg.ConsumerId, err.Error()) - } else if ownerAddress != h.k.GetAuthority() { - return fmt.Errorf("owner address (%s) is not the gov module (%s)", ownerAddress, h.k.GetAuthority()) - } - - if hasUpdateConsumerMsg { - return fmt.Errorf("proposal can contain at most one `MsgUpdateConsumer` message") - } - hasUpdateConsumerMsg = true - h.k.SetProposalIdToConsumerId(ctx, proposalId, sdkMsg.ConsumerId) - } - - // if the proposal contains a deprecated message, cancel the proposal - _, isMsgConsumerAddition := msg.GetCachedValue().(*providertypes.MsgConsumerAddition) - if isMsgConsumerAddition { - return fmt.Errorf("proposal cannot contain deprecated `MsgConsumerAddition`; use `MsgCreateConsumer` instead") - } - - _, isMsgConsumerModification := msg.GetCachedValue().(*providertypes.MsgConsumerModification) - if isMsgConsumerModification { - return fmt.Errorf("proposal cannot contain deprecated `MsgConsumerModification`; use `MsgUpdateConsumer` instead") - } - _, isMsgConsumerRemoval := msg.GetCachedValue().(*providertypes.MsgConsumerRemoval) - if isMsgConsumerRemoval { - return fmt.Errorf("proposal cannot contain deprecated `MsgConsumerRemoval`; use `MsgRemoveConsumer` instead") - } - } - return nil } -// AfterProposalVotingPeriodEnded - call hook if registered -// After proposal voting ends, the consumer to proposal id record in store is deleted. -// TODO (PERMISSIONLESS) func (h Hooks) AfterProposalVotingPeriodEnded(goCtx context.Context, proposalId uint64) error { - ctx := sdk.UnwrapSDKContext(goCtx) - - p, err := h.k.govKeeper.Proposals.Get(ctx, proposalId) - if err != nil { - return fmt.Errorf("cannot retrieve proposal with id: %d", proposalId) - } - - for _, msg := range p.GetMessages() { - _, isUpdateConsumer := msg.GetCachedValue().(*providertypes.MsgUpdateConsumer) - if isUpdateConsumer { - h.k.DeleteProposalIdToConsumerId(ctx, proposalId) - return nil - } - } - return nil } diff --git a/x/ccv/provider/keeper/keeper_test.go b/x/ccv/provider/keeper/keeper_test.go index d781164e5b..b9b8294955 100644 --- a/x/ccv/provider/keeper/keeper_test.go +++ b/x/ccv/provider/keeper/keeper_test.go @@ -284,101 +284,6 @@ func TestSetSlashLog(t *testing.T) { require.False(t, providerKeeper.GetSlashLog(ctx, addrWithoutDoubleSigns)) } -func TestSetProposedConsumerChains(t *testing.T) { - providerKeeper, ctx, ctrl, _ := testkeeper.GetProviderKeeperAndCtx(t, testkeeper.NewInMemKeeperParams(t)) - defer ctrl.Finish() - - tests := []struct { - consumerId string - proposalId uint64 - }{ - {consumerId: "1", proposalId: 1}, - {consumerId: "some other ID", proposalId: 12}, - {consumerId: "some other other chain ID", proposalId: 123}, - {consumerId: "", proposalId: 1234}, - } - - for _, test := range tests { - providerKeeper.SetProposalIdToConsumerId(ctx, test.proposalId, test.consumerId) - cID, _ := providerKeeper.GetProposalIdToConsumerId(ctx, test.proposalId) - require.Equal(t, cID, test.consumerId) - } -} - -func TestDeleteProposedConsumerChainInStore(t *testing.T) { - providerKeeper, ctx, ctrl, _ := testkeeper.GetProviderKeeperAndCtx(t, testkeeper.NewInMemKeeperParams(t)) - defer ctrl.Finish() - - tests := []struct { - chainId string - proposalId uint64 - deleteProposalId uint64 - ok bool - }{ - {chainId: "1", proposalId: 1, deleteProposalId: 1, ok: true}, - {chainId: "", proposalId: 12, deleteProposalId: 12, ok: true}, - {chainId: "1", proposalId: 0, deleteProposalId: 1, ok: false}, - } - for _, test := range tests { - providerKeeper.SetProposalIdToConsumerId(ctx, test.proposalId, test.chainId) - providerKeeper.DeleteProposalIdToConsumerId(ctx, test.deleteProposalId) - cID, found := providerKeeper.GetProposalIdToConsumerId(ctx, test.proposalId) - if test.ok { - require.False(t, found) - } else { - require.Equal(t, cID, test.chainId) - } - } -} - -func TestGetAllProposedConsumerChainIDs(t *testing.T) { - providerKeeper, ctx, ctrl, _ := testkeeper.GetProviderKeeperAndCtx(t, testkeeper.NewInMemKeeperParams(t)) - defer ctrl.Finish() - tests := [][]types.ProposedChain{ - {}, - { - { - ConsumerId: "1", - ProposalID: 1, - }, - }, - { - { - ConsumerId: "1", - ProposalID: 1, - }, - { - ConsumerId: "2", - ProposalID: 2, - }, - { - ConsumerId: "", - ProposalID: 3, - }, - }, - } - - for _, test := range tests { - for _, tc := range test { - providerKeeper.SetProposalIdToConsumerId(ctx, tc.ProposalID, tc.ConsumerId) - } - - chains := providerKeeper.GetAllProposedConsumerChainIDs(ctx) - - sort.Slice(chains, func(i, j int) bool { - return chains[i].ProposalID < chains[j].ProposalID - }) - sort.Slice(test, func(i, j int) bool { - return test[i].ProposalID < test[j].ProposalID - }) - require.Equal(t, chains, test) - - for _, tc := range test { - providerKeeper.DeleteProposalIdToConsumerId(ctx, tc.ProposalID) - } - } -} - // TestTopN tests the `SetTopN`, `GetTopN`, `IsTopN`, and `IsOptIn` methods func TestTopN(t *testing.T) { providerKeeper, ctx, ctrl, _ := testkeeper.GetProviderKeeperAndCtx(t, testkeeper.NewInMemKeeperParams(t)) diff --git a/x/ccv/provider/keeper/partial_set_security.go b/x/ccv/provider/keeper/partial_set_security.go index 305f0f358b..fbb3cff44e 100644 --- a/x/ccv/provider/keeper/partial_set_security.go +++ b/x/ccv/provider/keeper/partial_set_security.go @@ -137,7 +137,7 @@ func (k Keeper) OptInTopNValidators(ctx sdk.Context, consumerId string, bondedVa // if validator already exists it gets overwritten k.SetOptedIn(ctx, consumerId, types.NewProviderConsAddress(consAddr)) - k.SetOptedIn(ctx, consumerId, types.NewProviderConsAddress(consAddr)) + k.AppendOptedInConsumerId(ctx, types.NewProviderConsAddress(consAddr), consumerId) } // else validators that do not belong to the top N validators but were opted in, remain opted in } } diff --git a/x/ccv/provider/keeper/partial_set_security_test.go b/x/ccv/provider/keeper/partial_set_security_test.go index c710e7f299..8d94c715b2 100644 --- a/x/ccv/provider/keeper/partial_set_security_test.go +++ b/x/ccv/provider/keeper/partial_set_security_test.go @@ -80,7 +80,6 @@ func TestHandleOptInWithConsumerKey(t *testing.T) { } gomock.InOrder(calls...) - providerKeeper.SetProposalIdToConsumerId(ctx, 1, "consumerId") // create a sample consumer key to assign to the `providerAddr` validator // on the consumer chain with `consumerId` @@ -198,7 +197,6 @@ func TestHandleSetConsumerCommissionRate(t *testing.T) { consumerId := "0" providerKeeper.FetchAndIncrementConsumerId(ctx) providerKeeper.SetConsumerPhase(ctx, consumerId, keeper.Initialized) - providerKeeper.SetPendingConsumerAdditionProp(ctx, &types.ConsumerAdditionProposal{ChainId: consumerId}) // check that there's no commission rate set for the validator yet _, found := providerKeeper.GetConsumerCommissionRate(ctx, consumerId, providerAddr) diff --git a/x/ccv/provider/migrations/v8/migrations.go b/x/ccv/provider/migrations/v8/migrations.go index 0c4a759f0b..2cc01ae9fe 100644 --- a/x/ccv/provider/migrations/v8/migrations.go +++ b/x/ccv/provider/migrations/v8/migrations.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/binary" "fmt" + "github.com/cosmos/cosmos-sdk/types/bech32" "time" errorsmod "cosmossdk.io/errors" @@ -45,6 +46,7 @@ const ( InitChainHeightKeyPrefix = byte(16) PendingVSCsKeyPrefix = byte(17) EquivocationEvidenceMinHeightKeyPrefix = byte(29) + ConsumerRewardsAllocationKeyPrefix = byte(38) MinimumPowerInTopNKeyPrefix = byte(40) ) @@ -128,7 +130,7 @@ func MigrateLaunchedConsumerChains(ctx sdk.Context, store storetypes.KVStore, pk chainIds := []string{} iterator := storetypes.KVStorePrefixIterator(store, []byte{LegacyChainToClientKeyPrefix}) for ; iterator.Valid(); iterator.Next() { - // remove 1 byte prefix from key to retrieve chainID + // remove 1 byte prefix from key to retrieve chainId chainId := string(iterator.Key()[1:]) chainIds = append(chainIds, chainId) } @@ -138,70 +140,75 @@ func MigrateLaunchedConsumerChains(ctx sdk.Context, store storetypes.KVStore, pk } for _, chainId := range chainIds { - // create new consumerID + // create new consumerId consumerId := pk.FetchAndIncrementConsumerId(ctx) // re-key store - // chainId -> clientId - rekeyFromChainIdToConsumerId(store, LegacyChainToClientKeyPrefix, chainId, consumerId) + // channelId -> chainId + channelId, found := pk.GetConsumerIdToChannelId(ctx, chainId) + if !found { + return errorsmod.Wrapf(ccv.ErrInvalidConsumerState, "cannot find channel id associated with consumer id: %s", consumerId) + } + pk.SetChannelToConsumerId(ctx, channelId, consumerId) + // chainId -> channelId rekeyFromChainIdToConsumerId(store, LegacyChainToChannelKeyPrefix, chainId, consumerId) + + // chainId -> clientId + rekeyFromChainIdToConsumerId(store, LegacyChainToClientKeyPrefix, chainId, consumerId) + // chainId -> consumer genesis rekeyFromChainIdToConsumerId(store, ConsumerGenesisKeyPrefix, chainId, consumerId) + // chainId -> SlashAcks rekeyFromChainIdToConsumerId(store, SlashAcksKeyPrefix, chainId, consumerId) + // chainId -> InitChainHeight rekeyFromChainIdToConsumerId(store, InitChainHeightKeyPrefix, chainId, consumerId) + // chainId -> PendingVSCs rekeyFromChainIdToConsumerId(store, PendingVSCsKeyPrefix, chainId, consumerId) - // chainId -> EquivocationEvidenceMinHeight - rekeyFromChainIdToConsumerId(store, EquivocationEvidenceMinHeightKeyPrefix, chainId, consumerId) - // chainId -> MinimumPowerInTopN - rekeyFromChainIdToConsumerId(store, MinimumPowerInTopNKeyPrefix, chainId, consumerId) // chainId -> ConsumerValidators rekeyChainIdAndConsAddrKey(store, providertypes.ConsumerValidatorsKeyPrefix(), chainId, consumerId) + // chainId -> ValidatorsByConsumerAddr rekeyChainIdAndConsAddrKey(store, providertypes.ValidatorsByConsumerAddrKeyPrefix(), chainId, consumerId) - // chainId -> ConsumerCommissionRate - rekeyChainIdAndConsAddrKey(store, providertypes.ConsumerCommissionRateKeyPrefix(), chainId, consumerId) + + // chainId -> EquivocationEvidenceMinHeight + rekeyFromChainIdToConsumerId(store, EquivocationEvidenceMinHeightKeyPrefix, chainId, consumerId) + // chainId -> ConsumerValidator rekeyChainIdAndConsAddrKey(store, providertypes.ConsumerValidatorKeyPrefix(), chainId, consumerId) + + // chainId -> OptedIn + rekeyChainIdAndConsAddrKey(store, providertypes.OptedInKeyPrefix(), chainId, consumerId) + // chainId -> Allowlist rekeyChainIdAndConsAddrKey(store, providertypes.AllowlistKeyPrefix(), chainId, consumerId) + // chainId -> Denylist rekeyChainIdAndConsAddrKey(store, providertypes.DenylistKeyPrefix(), chainId, consumerId) - // chainId -> OptedIn - rekeyChainIdAndConsAddrKey(store, providertypes.OptedInKeyPrefix(), chainId, consumerId) + + // chainId -> ConsumerRewardsAllocations + rekeyFromChainIdToConsumerId(store, ConsumerRewardsAllocationKeyPrefix, chainId, consumerId) + + // chainId -> ConsumerCommissionRate + rekeyChainIdAndConsAddrKey(store, providertypes.ConsumerCommissionRateKeyPrefix(), chainId, consumerId) + + // chainId -> MinimumPowerInTopN + rekeyFromChainIdToConsumerId(store, MinimumPowerInTopNKeyPrefix, chainId, consumerId) // chainId -> ConsumerAddrsToPruneV2 rekeyChainIdAndTsKey(store, providertypes.ConsumerAddrsToPruneV2KeyPrefix(), chainId, consumerId) - // set channelId -> consumerId mapping - channelId, found := pk.GetConsumerIdToChannelId(ctx, consumerId) - if !found { - return errorsmod.Wrapf(ccv.ErrInvalidConsumerState, "cannot find channel ID associated with consumer ID: %s", consumerId) - } - pk.SetChannelToConsumerId(ctx, channelId, consumerId) - - // set clientId -> consumerId mapping - clinetId, found := pk.GetConsumerClientId(ctx, consumerId) - if !found { - return errorsmod.Wrapf(ccv.ErrInvalidConsumerState, "cannot find client ID associated with consumer ID: %s", consumerId) - } - pk.SetClientIdToConsumerId(ctx, clinetId, consumerId) + pk.SetConsumerChainId(ctx, consumerId, chainId) // set ownership -- all existing chains are owned by gov pk.SetConsumerOwnerAddress(ctx, consumerId, pk.GetAuthority()) - pk.SetConsumerChainId(ctx, consumerId, chainId) - - // set phase to launched - // TODO make sure the chain cannot be in Stopped phase - pk.SetConsumerPhase(ctx, consumerId, providerkeeper.Launched) // Note: ConsumerMetadata will be populated in the upgrade handler - // Note: InitializationParameters is not needed since the chain is already launched // migrate power shaping params @@ -211,37 +218,86 @@ func MigrateLaunchedConsumerChains(ctx sdk.Context, store storetypes.KVStore, pk if buf != nil { topN = binary.BigEndian.Uint32(buf) } + validatorsPowerCapKey := append([]byte{LegacyValidatorsPowerCapKeyPrefix}, []byte(chainId)...) var validatorsPowerCap uint32 = 0 buf = store.Get(validatorsPowerCapKey) if buf != nil { validatorsPowerCap = binary.BigEndian.Uint32(buf) } + validatorSetCapKey := append([]byte{LegacyValidatorSetCapKeyPrefix}, []byte(chainId)...) var validatorSetCap uint32 = 0 buf = store.Get(validatorSetCapKey) if buf != nil { validatorSetCap = binary.BigEndian.Uint32(buf) } + + bech32PrefixConsAddr := sdk.GetConfig().GetBech32ConsensusAddrPrefix() + var allowlist []string + for _, addr := range pk.GetAllowList(ctx, consumerId) { + foo, _ := bech32.ConvertAndEncode(bech32PrefixConsAddr, addr.ToSdkConsAddr().Bytes()) + allowlist = append(allowlist, foo) + } + + var denylist []string + for _, addr := range pk.GetDenyList(ctx, consumerId) { + foo, _ := bech32.ConvertAndEncode(bech32PrefixConsAddr, addr.ToSdkConsAddr().Bytes()) + allowlist = append(allowlist, foo) + } + powerShapingParameters := providertypes.PowerShapingParameters{ Top_N: topN, ValidatorsPowerCap: validatorsPowerCap, ValidatorSetCap: validatorSetCap, - Allowlist: []string{}, // leave empty - Denylist: []string{}, // leave empty - MinStake: 0, - AllowInactiveVals: false, + Allowlist: allowlist, + Denylist: denylist, + // do not set those since they do not exist in a previous interchain-security version and hence cannot be set + MinStake: 0, + AllowInactiveVals: false, } err := pk.SetConsumerPowerShapingParameters(ctx, consumerId, powerShapingParameters) if err != nil { return err } - // TODO other keys - // - ConsumerIdToStopTimeKey - // - ProviderConsAddrToOptedInConsumerIdsKey - // - ... + // set phase to launched + pk.SetConsumerPhase(ctx, consumerId, providerkeeper.Launched) + // An already-launched chain might haven been set to be removed. After the migration, we won't be looking + // at the removal props anymore to remove chains. Because of this, if the chain is set to be removed we + // set its stop time and append the consumer to be stopped. + removalProps, err := legacyGetAllPendingConsumerRemovalProps(store) + if err != nil { + return err + } + for _, prop := range removalProps { + if prop.ChainId == chainId { + err := pk.SetConsumerStopTime(ctx, consumerId, prop.StopTime) + if err != nil { + return err + } + err = pk.AppendConsumerToBeStoppedOnStopTime(ctx, consumerId, prop.StopTime) + if err != nil { + return err + } + + break + } + } + + // This is to migrate everything under `ProviderConsAddrToOptedInConsumerIdsKey` + // `OptedIn` was already re-keyed earlier (see above) and hence we can use `consumerId` here. + for _, providerConsAddr := range pk.GetAllOptedIn(ctx, consumerId) { + pk.AppendOptedInConsumerId(ctx, providerConsAddr, consumerId) + } + + // set clientId -> consumerId mapping + clientId, found := pk.GetConsumerClientId(ctx, consumerId) // consumer to client was already re-keyed so we can use `consumerId` here + if !found { + return errorsmod.Wrapf(ccv.ErrInvalidConsumerState, "cannot find client ID associated with consumer ID: %s", consumerId) + } + pk.SetClientIdToConsumerId(ctx, clientId, consumerId) } return nil @@ -256,9 +312,47 @@ func MigratePreLaunchedConsumerChains(ctx sdk.Context, store storetypes.KVStore, } for _, prop := range props { - // TODO - // - each prop should have a spawn time set, so it can be added to AppendConsumerToBeLaunchedOnSpawnTime - // - populate the state accordingly, including the InitializationParameters + consumerId := pk.FetchAndIncrementConsumerId(ctx) + + pk.SetConsumerOwnerAddress(ctx, consumerId, pk.GetAuthority()) + pk.SetConsumerChainId(ctx, consumerId, prop.ChainId) + + consumerMetadata := providertypes.ConsumerMetadata{ + Name: prop.ChainId, + Description: prop.Description, + } + pk.SetConsumerMetadata(ctx, consumerId, consumerMetadata) + + initializationParameters := providertypes.ConsumerInitializationParameters{ + InitialHeight: prop.InitialHeight, + GenesisHash: prop.GenesisHash, + BinaryHash: prop.BinaryHash, + SpawnTime: prop.SpawnTime, + UnbondingPeriod: prop.UnbondingPeriod, + CcvTimeoutPeriod: prop.CcvTimeoutPeriod, + TransferTimeoutPeriod: prop.TransferTimeoutPeriod, + ConsumerRedistributionFraction: prop.ConsumerRedistributionFraction, + BlocksPerDistributionTransmission: prop.BlocksPerDistributionTransmission, + HistoricalEntries: prop.HistoricalEntries, + DistributionTransmissionChannel: prop.DistributionTransmissionChannel, + } + pk.SetConsumerInitializationParameters(ctx, consumerId, initializationParameters) + + powerShapingParameters := providertypes.PowerShapingParameters{ + Top_N: prop.Top_N, + ValidatorsPowerCap: prop.ValidatorsPowerCap, + ValidatorSetCap: prop.ValidatorSetCap, + Allowlist: prop.Allowlist, + Denylist: prop.Denylist, + MinStake: prop.MinStake, + AllowInactiveVals: prop.AllowInactiveVals, + } + pk.SetConsumerPowerShapingParameters(ctx, consumerId, powerShapingParameters) + + if spawnTime, canLaunch := pk.CanLaunch(ctx, consumerId); canLaunch { + pk.SetConsumerPhase(ctx, consumerId, providerkeeper.Initialized) + pk.PrepareConsumerForLaunch(ctx, consumerId, time.Time{}, spawnTime) + } } // Note that the keys are deleted in CleanupState @@ -269,15 +363,19 @@ func MigratePreLaunchedConsumerChains(ctx sdk.Context, store storetypes.KVStore, // MigrateStoppedConsumerChains migrates all the state for consumer chains about to be stopped // Note that it must be executed before CleanupState. func MigrateStoppedConsumerChains(ctx sdk.Context, store storetypes.KVStore, pk providerkeeper.Keeper) error { + // NOTE: We already do the migration of to-be-stopped chains in `MigrateLaunchedConsumerChains`. If a chain can/is to be stopped + // it means it still launched at the moment of the migration. + props, err := legacyGetAllPendingConsumerRemovalProps(store) if err != nil { return err } for _, prop := range props { + _ = prop // TODO - // - each prop should have a stop time set, so it can be added to AppendConsumerToBeStoppedOnStopTime - // - populate the state accordingly + //- each prop should have a stop time set, so it can be added to AppendConsumerToBeStoppedOnStopTime + //- populate the state accordingly } // Note that the keys are deleted in CleanupState diff --git a/x/ccv/provider/module_test.go b/x/ccv/provider/module_test.go index a019eb162f..9cbe5d6f4c 100644 --- a/x/ccv/provider/module_test.go +++ b/x/ccv/provider/module_test.go @@ -104,8 +104,6 @@ func TestInitGenesis(t *testing.T) { providerKeeper.GetValidatorSetUpdateId(ctx), nil, tc.consumerStates, - nil, - nil, types.DefaultParams(), nil, nil, diff --git a/x/ccv/provider/types/genesis.go b/x/ccv/provider/types/genesis.go index 5cd60982a6..95ca6f44ce 100644 --- a/x/ccv/provider/types/genesis.go +++ b/x/ccv/provider/types/genesis.go @@ -16,23 +16,19 @@ func NewGenesisState( vscID uint64, vscIdToHeights []ValsetUpdateIdToHeight, consumerStates []ConsumerState, - additionProposals []ConsumerAdditionProposal, - removalProposals []ConsumerRemovalProposal, params Params, validatorConsumerPubkeys []ValidatorConsumerPubKey, validatorsByConsumerAddr []ValidatorByConsumerAddr, consumerAddrsToPrune []ConsumerAddrsToPruneV2, ) *GenesisState { return &GenesisState{ - ValsetUpdateId: vscID, - ValsetUpdateIdToHeight: vscIdToHeights, - ConsumerStates: consumerStates, - ConsumerAdditionProposals: additionProposals, - ConsumerRemovalProposals: removalProposals, - Params: params, - ValidatorConsumerPubkeys: validatorConsumerPubkeys, - ValidatorsByConsumerAddr: validatorsByConsumerAddr, - ConsumerAddrsToPruneV2: consumerAddrsToPrune, + ValsetUpdateId: vscID, + ValsetUpdateIdToHeight: vscIdToHeights, + ConsumerStates: consumerStates, + Params: params, + ValidatorConsumerPubkeys: validatorConsumerPubkeys, + ValidatorsByConsumerAddr: validatorsByConsumerAddr, + ConsumerAddrsToPruneV2: consumerAddrsToPrune, } } diff --git a/x/ccv/provider/types/genesis_test.go b/x/ccv/provider/types/genesis_test.go index c5472e07d5..09256a3cdd 100644 --- a/x/ccv/provider/types/genesis_test.go +++ b/x/ccv/provider/types/genesis_test.go @@ -33,8 +33,6 @@ func TestValidateGenesisState(t *testing.T) { types.DefaultValsetUpdateID, nil, []types.ConsumerState{{ChainId: "chainid-1", ChannelId: "channelid", ClientId: "client-id", ConsumerGenesis: getInitialConsumerGenesis(t, "chainid-1")}}, - nil, - nil, types.DefaultParams(), nil, nil, @@ -53,8 +51,6 @@ func TestValidateGenesisState(t *testing.T) { {ChainId: "chainid-3", ChannelId: "channelid3", ClientId: "client-id", ConsumerGenesis: getInitialConsumerGenesis(t, "chainid-3")}, {ChainId: "chainid-4", ChannelId: "channelid4", ClientId: "client-id", ConsumerGenesis: getInitialConsumerGenesis(t, "chainid-4")}, }, - nil, - nil, types.DefaultParams(), nil, nil, @@ -68,8 +64,6 @@ func TestValidateGenesisState(t *testing.T) { types.DefaultValsetUpdateID, nil, []types.ConsumerState{{ChainId: "chainid-1", ChannelId: "channelid", ClientId: "client-id", ConsumerGenesis: getInitialConsumerGenesis(t, "chainid-1")}}, - nil, - nil, types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0, time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}), types.DefaultTrustingPeriodFraction, time.Hour, time.Hour, "0.1", sdk.Coin{Denom: "stake", Amount: math.NewInt(10000000)}, 600, 24, 180), @@ -85,8 +79,6 @@ func TestValidateGenesisState(t *testing.T) { 0, nil, nil, - nil, - nil, types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0, time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}), types.DefaultTrustingPeriodFraction, time.Hour, time.Hour, "0.1", sdk.Coin{Denom: "stake", Amount: math.NewInt(10000000)}, 600, 24, 180), @@ -102,8 +94,6 @@ func TestValidateGenesisState(t *testing.T) { types.DefaultValsetUpdateID, []types.ValsetUpdateIdToHeight{{ValsetUpdateId: 0}}, nil, - nil, - nil, types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0, time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}), types.DefaultTrustingPeriodFraction, time.Hour, time.Hour, "0.1", sdk.Coin{Denom: "stake", Amount: math.NewInt(10000000)}, 600, 24, 180), @@ -119,8 +109,6 @@ func TestValidateGenesisState(t *testing.T) { types.DefaultValsetUpdateID, nil, []types.ConsumerState{{ChainId: "chainid-1", ChannelId: "channelid", ClientId: "client-id"}}, - nil, - nil, types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0, 0, clienttypes.Height{}, nil, []string{"ibc", "upgradedIBCState"}), types.DefaultTrustingPeriodFraction, @@ -140,8 +128,6 @@ func TestValidateGenesisState(t *testing.T) { types.DefaultValsetUpdateID, nil, []types.ConsumerState{{ChainId: "chainid-1", ChannelId: "channelid", ClientId: "client-id"}}, - nil, - nil, types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0, time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}), "0.0", // 0 trusting period fraction here @@ -161,8 +147,6 @@ func TestValidateGenesisState(t *testing.T) { types.DefaultValsetUpdateID, nil, []types.ConsumerState{{ChainId: "chainid-1", ChannelId: "channelid", ClientId: "client-id"}}, - nil, - nil, types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0, time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}), types.DefaultTrustingPeriodFraction, @@ -182,8 +166,6 @@ func TestValidateGenesisState(t *testing.T) { types.DefaultValsetUpdateID, nil, []types.ConsumerState{{ChainId: "chainid-1", ChannelId: "channelid", ClientId: "client-id"}}, - nil, - nil, types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0, time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}), types.DefaultTrustingPeriodFraction, @@ -203,8 +185,6 @@ func TestValidateGenesisState(t *testing.T) { types.DefaultValsetUpdateID, nil, []types.ConsumerState{{ChainId: "chainid-1", ChannelId: "channelid", ClientId: "client-id"}}, - nil, - nil, types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0, time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}), types.DefaultTrustingPeriodFraction, @@ -224,8 +204,6 @@ func TestValidateGenesisState(t *testing.T) { types.DefaultValsetUpdateID, nil, []types.ConsumerState{{ChainId: "", ChannelId: "channelid", ClientId: "client-id"}}, - nil, - nil, types.DefaultParams(), nil, nil, @@ -239,8 +217,6 @@ func TestValidateGenesisState(t *testing.T) { types.DefaultValsetUpdateID, nil, []types.ConsumerState{{ChainId: "chainid", ChannelId: "ivnalidChannel{}", ClientId: "client-id"}}, - nil, - nil, types.DefaultParams(), nil, nil, @@ -254,8 +230,6 @@ func TestValidateGenesisState(t *testing.T) { types.DefaultValsetUpdateID, nil, []types.ConsumerState{{ChainId: "chainid", ChannelId: "channel-0", ClientId: ""}}, - nil, - nil, types.DefaultParams(), nil, nil, @@ -269,8 +243,6 @@ func TestValidateGenesisState(t *testing.T) { types.DefaultValsetUpdateID, nil, []types.ConsumerState{{ChainId: "chainid", ChannelId: "channel-0", ClientId: "abc", ConsumerGenesis: getInitialConsumerGenesis(t, "chainid")}}, - nil, - nil, types.DefaultParams(), nil, nil, @@ -287,8 +259,6 @@ func TestValidateGenesisState(t *testing.T) { ChainId: "chainid", ChannelId: "channel-0", ClientId: "client-id", ConsumerGenesis: ccv.ConsumerGenesisState{}, }}, - nil, - nil, types.DefaultParams(), nil, nil, @@ -306,8 +276,6 @@ func TestValidateGenesisState(t *testing.T) { ConsumerGenesis: getInitialConsumerGenesis(t, "chainid"), SlashDowntimeAck: []string{"cosmosvaloper1qlmk6r5w5taqrky4ycur4zq6jqxmuzr688htpp"}, }}, - nil, - nil, types.DefaultParams(), nil, nil, @@ -325,8 +293,6 @@ func TestValidateGenesisState(t *testing.T) { ConsumerGenesis: getInitialConsumerGenesis(t, "chainid"), PendingValsetChanges: []ccv.ValidatorSetChangePacketData{{}}, }}, - nil, - nil, types.DefaultParams(), nil, nil, @@ -348,8 +314,6 @@ func TestValidateGenesisState(t *testing.T) { ValidatorUpdates: []abci.ValidatorUpdate{{}}, }}, }}, - nil, - nil, types.DefaultParams(), nil, nil, @@ -363,8 +327,6 @@ func TestValidateGenesisState(t *testing.T) { types.DefaultValsetUpdateID, nil, []types.ConsumerState{{ChainId: "chainid-1", ChannelId: "channelid", ClientId: "client-id", ConsumerGenesis: getInitialConsumerGenesis(t, "chainid-1")}}, - nil, - nil, types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0, time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}), types.DefaultTrustingPeriodFraction, time.Hour, time.Hour, "0.1", sdk.Coin{Denom: "st", Amount: math.NewInt(10000000)}, 600, 24, 180), @@ -380,8 +342,6 @@ func TestValidateGenesisState(t *testing.T) { types.DefaultValsetUpdateID, nil, []types.ConsumerState{{ChainId: "chainid-1", ChannelId: "channelid", ClientId: "client-id", ConsumerGenesis: getInitialConsumerGenesis(t, "chainid-1")}}, - nil, - nil, types.NewParams(ibctmtypes.NewClientState("", ibctmtypes.DefaultTrustLevel, 0, 0, time.Second*40, clienttypes.Height{}, commitmenttypes.GetSDKSpecs(), []string{"ibc", "upgradedIBCState"}), types.DefaultTrustingPeriodFraction, time.Hour, time.Hour, "0.1", sdk.Coin{Denom: "stake", Amount: math.NewInt(-1000000)}, 600, 24, 180), diff --git a/x/ccv/provider/types/query.pb.go b/x/ccv/provider/types/query.pb.go index aee4e3d717..e961f04a93 100644 --- a/x/ccv/provider/types/query.pb.go +++ b/x/ccv/provider/types/query.pb.go @@ -216,6 +216,7 @@ func (m *QueryConsumerChainsResponse) GetChains() []*Chain { return nil } +// [DEPRECATED] use `QueryConsumersThatAreAboutToStartRequest` instead type QueryConsumerChainStartProposalsRequest struct { } @@ -254,8 +255,9 @@ func (m *QueryConsumerChainStartProposalsRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryConsumerChainStartProposalsRequest proto.InternalMessageInfo +// [DEPRECATED] use `QueryConsumersThatAreAboutToStartResponse` instead type QueryConsumerChainStartProposalsResponse struct { - Proposals *ConsumerAdditionProposals `protobuf:"bytes,1,opt,name=proposals,proto3" json:"proposals,omitempty"` + Proposals *ConsumerAdditionProposals `protobuf:"bytes,1,opt,name=proposals,proto3" json:"proposals,omitempty"` // Deprecated: Do not use. } func (m *QueryConsumerChainStartProposalsResponse) Reset() { @@ -293,6 +295,7 @@ func (m *QueryConsumerChainStartProposalsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryConsumerChainStartProposalsResponse proto.InternalMessageInfo +// Deprecated: Do not use. func (m *QueryConsumerChainStartProposalsResponse) GetProposals() *ConsumerAdditionProposals { if m != nil { return m.Proposals @@ -300,6 +303,93 @@ func (m *QueryConsumerChainStartProposalsResponse) GetProposals() *ConsumerAddit return nil } +type QueryConsumersThatAreAboutToStartRequest struct { +} + +func (m *QueryConsumersThatAreAboutToStartRequest) Reset() { + *m = QueryConsumersThatAreAboutToStartRequest{} +} +func (m *QueryConsumersThatAreAboutToStartRequest) String() string { return proto.CompactTextString(m) } +func (*QueryConsumersThatAreAboutToStartRequest) ProtoMessage() {} +func (*QueryConsumersThatAreAboutToStartRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_422512d7b7586cd7, []int{6} +} +func (m *QueryConsumersThatAreAboutToStartRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryConsumersThatAreAboutToStartRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryConsumersThatAreAboutToStartRequest.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 *QueryConsumersThatAreAboutToStartRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryConsumersThatAreAboutToStartRequest.Merge(m, src) +} +func (m *QueryConsumersThatAreAboutToStartRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryConsumersThatAreAboutToStartRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryConsumersThatAreAboutToStartRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryConsumersThatAreAboutToStartRequest proto.InternalMessageInfo + +type QueryConsumersThatAreAboutToStartResponse struct { + ConsumerIds []string `protobuf:"bytes,1,rep,name=consumer_ids,json=consumerIds,proto3" json:"consumer_ids,omitempty"` +} + +func (m *QueryConsumersThatAreAboutToStartResponse) Reset() { + *m = QueryConsumersThatAreAboutToStartResponse{} +} +func (m *QueryConsumersThatAreAboutToStartResponse) String() string { + return proto.CompactTextString(m) +} +func (*QueryConsumersThatAreAboutToStartResponse) ProtoMessage() {} +func (*QueryConsumersThatAreAboutToStartResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_422512d7b7586cd7, []int{7} +} +func (m *QueryConsumersThatAreAboutToStartResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryConsumersThatAreAboutToStartResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryConsumersThatAreAboutToStartResponse.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 *QueryConsumersThatAreAboutToStartResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryConsumersThatAreAboutToStartResponse.Merge(m, src) +} +func (m *QueryConsumersThatAreAboutToStartResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryConsumersThatAreAboutToStartResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryConsumersThatAreAboutToStartResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryConsumersThatAreAboutToStartResponse proto.InternalMessageInfo + +func (m *QueryConsumersThatAreAboutToStartResponse) GetConsumerIds() []string { + if m != nil { + return m.ConsumerIds + } + return nil +} + +// [DEPRECATED] use `QueryConsumersThatAreAboutToStopRequest` instead type QueryConsumerChainStopProposalsRequest struct { } @@ -309,7 +399,7 @@ func (m *QueryConsumerChainStopProposalsRequest) Reset() { func (m *QueryConsumerChainStopProposalsRequest) String() string { return proto.CompactTextString(m) } func (*QueryConsumerChainStopProposalsRequest) ProtoMessage() {} func (*QueryConsumerChainStopProposalsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{6} + return fileDescriptor_422512d7b7586cd7, []int{8} } func (m *QueryConsumerChainStopProposalsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -338,8 +428,9 @@ func (m *QueryConsumerChainStopProposalsRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryConsumerChainStopProposalsRequest proto.InternalMessageInfo +// [DEPRECATED] use `QueryConsumersThatAreAboutToStopResponse` instead type QueryConsumerChainStopProposalsResponse struct { - Proposals *ConsumerRemovalProposals `protobuf:"bytes,1,opt,name=proposals,proto3" json:"proposals,omitempty"` + Proposals *ConsumerRemovalProposals `protobuf:"bytes,1,opt,name=proposals,proto3" json:"proposals,omitempty"` // Deprecated: Do not use. } func (m *QueryConsumerChainStopProposalsResponse) Reset() { @@ -348,7 +439,7 @@ func (m *QueryConsumerChainStopProposalsResponse) Reset() { func (m *QueryConsumerChainStopProposalsResponse) String() string { return proto.CompactTextString(m) } func (*QueryConsumerChainStopProposalsResponse) ProtoMessage() {} func (*QueryConsumerChainStopProposalsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{7} + return fileDescriptor_422512d7b7586cd7, []int{9} } func (m *QueryConsumerChainStopProposalsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -377,6 +468,7 @@ func (m *QueryConsumerChainStopProposalsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryConsumerChainStopProposalsResponse proto.InternalMessageInfo +// Deprecated: Do not use. func (m *QueryConsumerChainStopProposalsResponse) GetProposals() *ConsumerRemovalProposals { if m != nil { return m.Proposals @@ -384,6 +476,90 @@ func (m *QueryConsumerChainStopProposalsResponse) GetProposals() *ConsumerRemova return nil } +type QueryConsumersThatAreAboutToStopRequest struct { +} + +func (m *QueryConsumersThatAreAboutToStopRequest) Reset() { + *m = QueryConsumersThatAreAboutToStopRequest{} +} +func (m *QueryConsumersThatAreAboutToStopRequest) String() string { return proto.CompactTextString(m) } +func (*QueryConsumersThatAreAboutToStopRequest) ProtoMessage() {} +func (*QueryConsumersThatAreAboutToStopRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_422512d7b7586cd7, []int{10} +} +func (m *QueryConsumersThatAreAboutToStopRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryConsumersThatAreAboutToStopRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryConsumersThatAreAboutToStopRequest.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 *QueryConsumersThatAreAboutToStopRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryConsumersThatAreAboutToStopRequest.Merge(m, src) +} +func (m *QueryConsumersThatAreAboutToStopRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryConsumersThatAreAboutToStopRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryConsumersThatAreAboutToStopRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryConsumersThatAreAboutToStopRequest proto.InternalMessageInfo + +type QueryConsumersThatAreAboutToStopResponse struct { + ConsumerIds []string `protobuf:"bytes,1,rep,name=consumer_ids,json=consumerIds,proto3" json:"consumer_ids,omitempty"` +} + +func (m *QueryConsumersThatAreAboutToStopResponse) Reset() { + *m = QueryConsumersThatAreAboutToStopResponse{} +} +func (m *QueryConsumersThatAreAboutToStopResponse) String() string { return proto.CompactTextString(m) } +func (*QueryConsumersThatAreAboutToStopResponse) ProtoMessage() {} +func (*QueryConsumersThatAreAboutToStopResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_422512d7b7586cd7, []int{11} +} +func (m *QueryConsumersThatAreAboutToStopResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryConsumersThatAreAboutToStopResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryConsumersThatAreAboutToStopResponse.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 *QueryConsumersThatAreAboutToStopResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryConsumersThatAreAboutToStopResponse.Merge(m, src) +} +func (m *QueryConsumersThatAreAboutToStopResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryConsumersThatAreAboutToStopResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryConsumersThatAreAboutToStopResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryConsumersThatAreAboutToStopResponse proto.InternalMessageInfo + +func (m *QueryConsumersThatAreAboutToStopResponse) GetConsumerIds() []string { + if m != nil { + return m.ConsumerIds + } + return nil +} + type Chain struct { ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` ClientId string `protobuf:"bytes,2,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` @@ -408,7 +584,7 @@ func (m *Chain) Reset() { *m = Chain{} } func (m *Chain) String() string { return proto.CompactTextString(m) } func (*Chain) ProtoMessage() {} func (*Chain) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{8} + return fileDescriptor_422512d7b7586cd7, []int{12} } func (m *Chain) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -506,7 +682,7 @@ func (m *QueryValidatorConsumerAddrRequest) Reset() { *m = QueryValidato func (m *QueryValidatorConsumerAddrRequest) String() string { return proto.CompactTextString(m) } func (*QueryValidatorConsumerAddrRequest) ProtoMessage() {} func (*QueryValidatorConsumerAddrRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{9} + return fileDescriptor_422512d7b7586cd7, []int{13} } func (m *QueryValidatorConsumerAddrRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -544,7 +720,7 @@ func (m *QueryValidatorConsumerAddrResponse) Reset() { *m = QueryValidat func (m *QueryValidatorConsumerAddrResponse) String() string { return proto.CompactTextString(m) } func (*QueryValidatorConsumerAddrResponse) ProtoMessage() {} func (*QueryValidatorConsumerAddrResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{10} + return fileDescriptor_422512d7b7586cd7, []int{14} } func (m *QueryValidatorConsumerAddrResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -593,7 +769,7 @@ func (m *QueryValidatorProviderAddrRequest) Reset() { *m = QueryValidato func (m *QueryValidatorProviderAddrRequest) String() string { return proto.CompactTextString(m) } func (*QueryValidatorProviderAddrRequest) ProtoMessage() {} func (*QueryValidatorProviderAddrRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{11} + return fileDescriptor_422512d7b7586cd7, []int{15} } func (m *QueryValidatorProviderAddrRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -631,7 +807,7 @@ func (m *QueryValidatorProviderAddrResponse) Reset() { *m = QueryValidat func (m *QueryValidatorProviderAddrResponse) String() string { return proto.CompactTextString(m) } func (*QueryValidatorProviderAddrResponse) ProtoMessage() {} func (*QueryValidatorProviderAddrResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{12} + return fileDescriptor_422512d7b7586cd7, []int{16} } func (m *QueryValidatorProviderAddrResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -674,7 +850,7 @@ func (m *QueryThrottleStateRequest) Reset() { *m = QueryThrottleStateReq func (m *QueryThrottleStateRequest) String() string { return proto.CompactTextString(m) } func (*QueryThrottleStateRequest) ProtoMessage() {} func (*QueryThrottleStateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{13} + return fileDescriptor_422512d7b7586cd7, []int{17} } func (m *QueryThrottleStateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -718,7 +894,7 @@ func (m *QueryThrottleStateResponse) Reset() { *m = QueryThrottleStateRe func (m *QueryThrottleStateResponse) String() string { return proto.CompactTextString(m) } func (*QueryThrottleStateResponse) ProtoMessage() {} func (*QueryThrottleStateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{14} + return fileDescriptor_422512d7b7586cd7, []int{18} } func (m *QueryThrottleStateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -779,7 +955,7 @@ func (m *QueryRegisteredConsumerRewardDenomsRequest) String() string { } func (*QueryRegisteredConsumerRewardDenomsRequest) ProtoMessage() {} func (*QueryRegisteredConsumerRewardDenomsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{15} + return fileDescriptor_422512d7b7586cd7, []int{19} } func (m *QueryRegisteredConsumerRewardDenomsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -820,7 +996,7 @@ func (m *QueryRegisteredConsumerRewardDenomsResponse) String() string { } func (*QueryRegisteredConsumerRewardDenomsResponse) ProtoMessage() {} func (*QueryRegisteredConsumerRewardDenomsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{16} + return fileDescriptor_422512d7b7586cd7, []int{20} } func (m *QueryRegisteredConsumerRewardDenomsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -863,7 +1039,7 @@ func (m *QueryProposedChainIDsRequest) Reset() { *m = QueryProposedChain func (m *QueryProposedChainIDsRequest) String() string { return proto.CompactTextString(m) } func (*QueryProposedChainIDsRequest) ProtoMessage() {} func (*QueryProposedChainIDsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{17} + return fileDescriptor_422512d7b7586cd7, []int{21} } func (m *QueryProposedChainIDsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -900,7 +1076,7 @@ func (m *QueryProposedChainIDsResponse) Reset() { *m = QueryProposedChai func (m *QueryProposedChainIDsResponse) String() string { return proto.CompactTextString(m) } func (*QueryProposedChainIDsResponse) ProtoMessage() {} func (*QueryProposedChainIDsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{18} + return fileDescriptor_422512d7b7586cd7, []int{22} } func (m *QueryProposedChainIDsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -947,7 +1123,7 @@ func (m *ProposedChain) Reset() { *m = ProposedChain{} } func (m *ProposedChain) String() string { return proto.CompactTextString(m) } func (*ProposedChain) ProtoMessage() {} func (*ProposedChain) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{19} + return fileDescriptor_422512d7b7586cd7, []int{23} } func (m *ProposedChain) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1013,7 +1189,7 @@ func (m *QueryAllPairsValConAddrByConsumerChainIDRequest) String() string { } func (*QueryAllPairsValConAddrByConsumerChainIDRequest) ProtoMessage() {} func (*QueryAllPairsValConAddrByConsumerChainIDRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{20} + return fileDescriptor_422512d7b7586cd7, []int{24} } func (m *QueryAllPairsValConAddrByConsumerChainIDRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1069,7 +1245,7 @@ func (m *QueryAllPairsValConAddrByConsumerChainIDResponse) String() string { } func (*QueryAllPairsValConAddrByConsumerChainIDResponse) ProtoMessage() {} func (*QueryAllPairsValConAddrByConsumerChainIDResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{21} + return fileDescriptor_422512d7b7586cd7, []int{25} } func (m *QueryAllPairsValConAddrByConsumerChainIDResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1117,7 +1293,7 @@ func (m *PairValConAddrProviderAndConsumer) Reset() { *m = PairValConAdd func (m *PairValConAddrProviderAndConsumer) String() string { return proto.CompactTextString(m) } func (*PairValConAddrProviderAndConsumer) ProtoMessage() {} func (*PairValConAddrProviderAndConsumer) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{22} + return fileDescriptor_422512d7b7586cd7, []int{26} } func (m *PairValConAddrProviderAndConsumer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1174,7 +1350,7 @@ func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } func (*QueryParamsRequest) ProtoMessage() {} func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{23} + return fileDescriptor_422512d7b7586cd7, []int{27} } func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1211,7 +1387,7 @@ func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } func (*QueryParamsResponse) ProtoMessage() {} func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{24} + return fileDescriptor_422512d7b7586cd7, []int{28} } func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1261,7 +1437,7 @@ func (m *QueryConsumerChainOptedInValidatorsRequest) String() string { } func (*QueryConsumerChainOptedInValidatorsRequest) ProtoMessage() {} func (*QueryConsumerChainOptedInValidatorsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{25} + return fileDescriptor_422512d7b7586cd7, []int{29} } func (m *QueryConsumerChainOptedInValidatorsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1318,7 +1494,7 @@ func (m *QueryConsumerChainOptedInValidatorsResponse) String() string { } func (*QueryConsumerChainOptedInValidatorsResponse) ProtoMessage() {} func (*QueryConsumerChainOptedInValidatorsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{26} + return fileDescriptor_422512d7b7586cd7, []int{30} } func (m *QueryConsumerChainOptedInValidatorsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1364,7 +1540,7 @@ func (m *QueryConsumerValidatorsRequest) Reset() { *m = QueryConsumerVal func (m *QueryConsumerValidatorsRequest) String() string { return proto.CompactTextString(m) } func (*QueryConsumerValidatorsRequest) ProtoMessage() {} func (*QueryConsumerValidatorsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{27} + return fileDescriptor_422512d7b7586cd7, []int{31} } func (m *QueryConsumerValidatorsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1443,7 +1619,7 @@ func (m *QueryConsumerValidatorsValidator) Reset() { *m = QueryConsumerV func (m *QueryConsumerValidatorsValidator) String() string { return proto.CompactTextString(m) } func (*QueryConsumerValidatorsValidator) ProtoMessage() {} func (*QueryConsumerValidatorsValidator) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{28} + return fileDescriptor_422512d7b7586cd7, []int{32} } func (m *QueryConsumerValidatorsValidator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1551,7 +1727,7 @@ func (m *QueryConsumerValidatorsResponse) Reset() { *m = QueryConsumerVa func (m *QueryConsumerValidatorsResponse) String() string { return proto.CompactTextString(m) } func (*QueryConsumerValidatorsResponse) ProtoMessage() {} func (*QueryConsumerValidatorsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{29} + return fileDescriptor_422512d7b7586cd7, []int{33} } func (m *QueryConsumerValidatorsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1600,7 +1776,7 @@ func (m *QueryConsumerChainsValidatorHasToValidateRequest) String() string { } func (*QueryConsumerChainsValidatorHasToValidateRequest) ProtoMessage() {} func (*QueryConsumerChainsValidatorHasToValidateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{30} + return fileDescriptor_422512d7b7586cd7, []int{34} } func (m *QueryConsumerChainsValidatorHasToValidateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1648,7 +1824,7 @@ func (m *QueryConsumerChainsValidatorHasToValidateResponse) String() string { } func (*QueryConsumerChainsValidatorHasToValidateResponse) ProtoMessage() {} func (*QueryConsumerChainsValidatorHasToValidateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{31} + return fileDescriptor_422512d7b7586cd7, []int{35} } func (m *QueryConsumerChainsValidatorHasToValidateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1700,7 +1876,7 @@ func (m *QueryValidatorConsumerCommissionRateRequest) String() string { } func (*QueryValidatorConsumerCommissionRateRequest) ProtoMessage() {} func (*QueryValidatorConsumerCommissionRateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{32} + return fileDescriptor_422512d7b7586cd7, []int{36} } func (m *QueryValidatorConsumerCommissionRateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1764,7 +1940,7 @@ func (m *QueryValidatorConsumerCommissionRateResponse) String() string { } func (*QueryValidatorConsumerCommissionRateResponse) ProtoMessage() {} func (*QueryValidatorConsumerCommissionRateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{33} + return fileDescriptor_422512d7b7586cd7, []int{37} } func (m *QueryValidatorConsumerCommissionRateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1800,7 +1976,7 @@ func (m *QueryBlocksUntilNextEpochRequest) Reset() { *m = QueryBlocksUnt func (m *QueryBlocksUntilNextEpochRequest) String() string { return proto.CompactTextString(m) } func (*QueryBlocksUntilNextEpochRequest) ProtoMessage() {} func (*QueryBlocksUntilNextEpochRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{34} + return fileDescriptor_422512d7b7586cd7, []int{38} } func (m *QueryBlocksUntilNextEpochRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1838,7 +2014,7 @@ func (m *QueryBlocksUntilNextEpochResponse) Reset() { *m = QueryBlocksUn func (m *QueryBlocksUntilNextEpochResponse) String() string { return proto.CompactTextString(m) } func (*QueryBlocksUntilNextEpochResponse) ProtoMessage() {} func (*QueryBlocksUntilNextEpochResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{35} + return fileDescriptor_422512d7b7586cd7, []int{39} } func (m *QueryBlocksUntilNextEpochResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1884,7 +2060,7 @@ func (m *QueryConsumerIdFromClientIdRequest) Reset() { *m = QueryConsume func (m *QueryConsumerIdFromClientIdRequest) String() string { return proto.CompactTextString(m) } func (*QueryConsumerIdFromClientIdRequest) ProtoMessage() {} func (*QueryConsumerIdFromClientIdRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{36} + return fileDescriptor_422512d7b7586cd7, []int{40} } func (m *QueryConsumerIdFromClientIdRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1929,7 +2105,7 @@ func (m *QueryConsumerIdFromClientIdResponse) Reset() { *m = QueryConsum func (m *QueryConsumerIdFromClientIdResponse) String() string { return proto.CompactTextString(m) } func (*QueryConsumerIdFromClientIdResponse) ProtoMessage() {} func (*QueryConsumerIdFromClientIdResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_422512d7b7586cd7, []int{37} + return fileDescriptor_422512d7b7586cd7, []int{41} } func (m *QueryConsumerIdFromClientIdResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1972,8 +2148,12 @@ func init() { proto.RegisterType((*QueryConsumerChainsResponse)(nil), "interchain_security.ccv.provider.v1.QueryConsumerChainsResponse") proto.RegisterType((*QueryConsumerChainStartProposalsRequest)(nil), "interchain_security.ccv.provider.v1.QueryConsumerChainStartProposalsRequest") proto.RegisterType((*QueryConsumerChainStartProposalsResponse)(nil), "interchain_security.ccv.provider.v1.QueryConsumerChainStartProposalsResponse") + proto.RegisterType((*QueryConsumersThatAreAboutToStartRequest)(nil), "interchain_security.ccv.provider.v1.QueryConsumersThatAreAboutToStartRequest") + proto.RegisterType((*QueryConsumersThatAreAboutToStartResponse)(nil), "interchain_security.ccv.provider.v1.QueryConsumersThatAreAboutToStartResponse") proto.RegisterType((*QueryConsumerChainStopProposalsRequest)(nil), "interchain_security.ccv.provider.v1.QueryConsumerChainStopProposalsRequest") proto.RegisterType((*QueryConsumerChainStopProposalsResponse)(nil), "interchain_security.ccv.provider.v1.QueryConsumerChainStopProposalsResponse") + proto.RegisterType((*QueryConsumersThatAreAboutToStopRequest)(nil), "interchain_security.ccv.provider.v1.QueryConsumersThatAreAboutToStopRequest") + proto.RegisterType((*QueryConsumersThatAreAboutToStopResponse)(nil), "interchain_security.ccv.provider.v1.QueryConsumersThatAreAboutToStopResponse") proto.RegisterType((*Chain)(nil), "interchain_security.ccv.provider.v1.Chain") proto.RegisterType((*QueryValidatorConsumerAddrRequest)(nil), "interchain_security.ccv.provider.v1.QueryValidatorConsumerAddrRequest") proto.RegisterType((*QueryValidatorConsumerAddrResponse)(nil), "interchain_security.ccv.provider.v1.QueryValidatorConsumerAddrResponse") @@ -2011,159 +2191,167 @@ func init() { } var fileDescriptor_422512d7b7586cd7 = []byte{ - // 2427 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0x4d, 0x6c, 0x1c, 0x49, - 0x15, 0x76, 0x8f, 0x7f, 0x62, 0x97, 0x37, 0xce, 0x6e, 0xc5, 0x89, 0x27, 0x63, 0xc7, 0xe3, 0x74, - 0x12, 0x98, 0x38, 0xc9, 0xb4, 0xed, 0xd5, 0xb2, 0x9b, 0x40, 0x36, 0xf1, 0x8c, 0xe3, 0x64, 0xe4, - 0x6c, 0xe2, 0x6d, 0x3b, 0x01, 0x79, 0x31, 0x9d, 0x76, 0x77, 0x31, 0x6e, 0xdc, 0xd3, 0xd5, 0xee, - 0xea, 0x99, 0x64, 0x14, 0xe5, 0xb0, 0x20, 0xa1, 0x5d, 0x0e, 0x28, 0x08, 0x21, 0x71, 0xdc, 0x0b, - 0x12, 0x07, 0x4e, 0x68, 0x05, 0xe2, 0xb6, 0xc7, 0xbd, 0xb1, 0xec, 0x5e, 0x10, 0x48, 0x01, 0x25, - 0x1c, 0x10, 0x12, 0x12, 0x5a, 0xb8, 0x22, 0xa1, 0xae, 0xae, 0xfe, 0x9d, 0x1e, 0x4f, 0xcf, 0x8c, - 0x0f, 0xdc, 0xdc, 0x55, 0xaf, 0xbe, 0x7a, 0xef, 0xd5, 0xab, 0x57, 0xef, 0x7d, 0x63, 0x20, 0x68, - 0x86, 0x8d, 0x2c, 0x65, 0x57, 0xd6, 0x0c, 0x89, 0x20, 0xa5, 0x6e, 0x69, 0x76, 0x53, 0x50, 0x94, - 0x86, 0x60, 0x5a, 0xb8, 0xa1, 0xa9, 0xc8, 0x12, 0x1a, 0x8b, 0xc2, 0x7e, 0x1d, 0x59, 0xcd, 0xa2, - 0x69, 0x61, 0x1b, 0xc3, 0xb3, 0x09, 0x0b, 0x8a, 0x8a, 0xd2, 0x28, 0x7a, 0x0b, 0x8a, 0x8d, 0xc5, - 0xdc, 0x4c, 0x15, 0xe3, 0xaa, 0x8e, 0x04, 0xd9, 0xd4, 0x04, 0xd9, 0x30, 0xb0, 0x2d, 0xdb, 0x1a, - 0x36, 0x88, 0x0b, 0x91, 0x9b, 0xac, 0xe2, 0x2a, 0xa6, 0x7f, 0x0a, 0xce, 0x5f, 0x6c, 0x34, 0xcf, - 0xd6, 0xd0, 0xaf, 0x9d, 0xfa, 0x77, 0x05, 0x5b, 0xab, 0x21, 0x62, 0xcb, 0x35, 0x93, 0x09, 0x2c, - 0xa5, 0x51, 0xd5, 0xd7, 0xc2, 0x5d, 0xb3, 0xd0, 0x6e, 0x4d, 0x63, 0x51, 0x20, 0xbb, 0xb2, 0x85, - 0x54, 0x49, 0xc1, 0x06, 0xa9, 0xd7, 0xfc, 0x15, 0xe7, 0x0f, 0x58, 0xf1, 0x48, 0xb3, 0x10, 0x13, - 0x9b, 0xb1, 0x91, 0xa1, 0x22, 0xab, 0xa6, 0x19, 0xb6, 0xa0, 0x58, 0x4d, 0xd3, 0xc6, 0xc2, 0x1e, - 0x6a, 0x7a, 0x16, 0x9e, 0x52, 0x30, 0xa9, 0x61, 0x22, 0xb9, 0x46, 0xba, 0x1f, 0x6c, 0xea, 0x9c, - 0xfb, 0x25, 0x10, 0x5b, 0xde, 0xd3, 0x8c, 0xaa, 0xd0, 0x58, 0xdc, 0x41, 0xb6, 0xbc, 0xe8, 0x7d, - 0xbb, 0x52, 0xfc, 0x36, 0x98, 0x7e, 0xd7, 0x71, 0x7a, 0x99, 0x29, 0x77, 0x0b, 0x19, 0x88, 0x68, - 0x44, 0x44, 0xfb, 0x75, 0x44, 0x6c, 0x78, 0x1a, 0x8c, 0xba, 0x1a, 0x6a, 0x6a, 0x96, 0x9b, 0xe3, - 0x0a, 0x63, 0xa5, 0x4c, 0x96, 0x13, 0x8f, 0xd0, 0xb1, 0x8a, 0x0a, 0xf3, 0x60, 0xdc, 0xb3, 0xca, - 0x91, 0xc8, 0x38, 0x12, 0x22, 0xf0, 0x86, 0x2a, 0x2a, 0xff, 0x04, 0xcc, 0x24, 0xc3, 0x13, 0x13, - 0x1b, 0x04, 0xc1, 0xf7, 0xc0, 0xd1, 0xaa, 0x3b, 0x24, 0x11, 0x5b, 0xb6, 0x11, 0xdd, 0x64, 0x7c, - 0x69, 0xa1, 0xd8, 0xee, 0xf0, 0x1b, 0x8b, 0xc5, 0x18, 0xd6, 0x86, 0xb3, 0xae, 0x34, 0xf4, 0xe9, - 0xf3, 0xfc, 0x80, 0xf8, 0x4a, 0x35, 0x34, 0xc6, 0xcf, 0x80, 0x5c, 0x64, 0xf3, 0xb2, 0x03, 0xe7, - 0x99, 0xc6, 0xcb, 0x31, 0xcb, 0xbd, 0x59, 0xa6, 0x59, 0x09, 0x8c, 0xd0, 0xed, 0x49, 0x96, 0x9b, - 0x1b, 0x2c, 0x8c, 0x2f, 0xcd, 0x17, 0x53, 0xc4, 0x63, 0x91, 0x82, 0x88, 0x6c, 0x25, 0x7f, 0x01, - 0x7c, 0xb5, 0x75, 0x8b, 0x0d, 0x5b, 0xb6, 0xec, 0x75, 0x0b, 0x9b, 0x98, 0xc8, 0xba, 0xaf, 0xcd, - 0x07, 0x1c, 0x28, 0x74, 0x96, 0x65, 0xba, 0x7d, 0x1b, 0x8c, 0x99, 0xde, 0x20, 0xf3, 0xd8, 0xdb, - 0xe9, 0xd4, 0x63, 0xe0, 0xcb, 0xaa, 0xaa, 0x39, 0x17, 0x25, 0x80, 0x0e, 0x00, 0xf9, 0x02, 0xf8, - 0x4a, 0x92, 0x26, 0xd8, 0x6c, 0x51, 0xfa, 0x87, 0x5c, 0xb2, 0x81, 0x11, 0x51, 0xff, 0xa4, 0x5b, - 0x74, 0xbe, 0xd6, 0x95, 0xce, 0x22, 0xaa, 0xe1, 0x86, 0xac, 0x27, 0xaa, 0xfc, 0xf3, 0x0c, 0x18, - 0xa6, 0x7b, 0xc3, 0x53, 0xf1, 0x80, 0x0d, 0x82, 0x75, 0x1a, 0x8c, 0x29, 0xba, 0x86, 0x0c, 0x3b, - 0x08, 0xd5, 0x51, 0x77, 0xa0, 0xa2, 0xc2, 0xe3, 0x60, 0xd8, 0xc6, 0xa6, 0x74, 0x37, 0x3b, 0x38, - 0xc7, 0x15, 0x8e, 0x8a, 0x43, 0x36, 0x36, 0xef, 0xc2, 0x79, 0x00, 0x6b, 0x9a, 0x21, 0x99, 0xf8, - 0x91, 0x13, 0xdf, 0x86, 0xe4, 0x4a, 0x0c, 0xcd, 0x71, 0x85, 0x41, 0x71, 0xa2, 0xa6, 0x19, 0xeb, - 0xce, 0x44, 0xc5, 0xd8, 0x74, 0x64, 0x17, 0xc0, 0x64, 0x43, 0xd6, 0x35, 0x55, 0xb6, 0xb1, 0x45, - 0xd8, 0x12, 0x45, 0x36, 0xb3, 0xc3, 0x14, 0x0f, 0x06, 0x73, 0x74, 0x51, 0x59, 0x36, 0xe1, 0x3c, - 0x78, 0xcd, 0x1f, 0x95, 0x08, 0xb2, 0xa9, 0xf8, 0x08, 0x15, 0x3f, 0xe6, 0x4f, 0x6c, 0x20, 0xdb, - 0x91, 0x9d, 0x01, 0x63, 0xb2, 0xae, 0xe3, 0x47, 0xba, 0x46, 0xec, 0xec, 0x91, 0xb9, 0xc1, 0xc2, - 0x98, 0x18, 0x0c, 0xc0, 0x1c, 0x18, 0x55, 0x91, 0xd1, 0xa4, 0x93, 0xa3, 0x74, 0xd2, 0xff, 0xe6, - 0x7f, 0xc5, 0x81, 0x33, 0xf4, 0x8c, 0x1e, 0x78, 0x90, 0xa1, 0x20, 0xb0, 0x52, 0xde, 0xf3, 0x6b, - 0xe0, 0x55, 0xef, 0x48, 0x24, 0x59, 0x55, 0x2d, 0x44, 0x88, 0xeb, 0xc1, 0x12, 0xfc, 0xf2, 0x79, - 0x7e, 0xa2, 0x29, 0xd7, 0xf4, 0xab, 0x3c, 0x9b, 0xe0, 0xc5, 0x63, 0x9e, 0xec, 0xb2, 0x3b, 0x12, - 0x4f, 0x13, 0x83, 0xf1, 0x34, 0x71, 0x75, 0xf4, 0x83, 0x8f, 0xf2, 0x03, 0x7f, 0xff, 0x28, 0x3f, - 0xc0, 0xdf, 0x03, 0xfc, 0x41, 0xda, 0xb2, 0x60, 0xba, 0x00, 0x5e, 0xf5, 0x01, 0x3d, 0x7d, 0xdc, - 0xd3, 0x3e, 0xa6, 0x84, 0xe4, 0x1d, 0x6d, 0x5a, 0xed, 0x5f, 0x0f, 0x69, 0x97, 0xde, 0xfe, 0x96, - 0xfd, 0x0e, 0xb0, 0x3f, 0xa6, 0x43, 0x5f, 0xf6, 0x47, 0xb5, 0x0d, 0xec, 0x6f, 0x39, 0x0f, 0x66, - 0x7f, 0xcc, 0xf7, 0xfc, 0x34, 0x38, 0x45, 0x01, 0x37, 0x77, 0x2d, 0x6c, 0xdb, 0x3a, 0xa2, 0xa9, - 0xd1, 0xbb, 0xc0, 0x7f, 0xe0, 0x58, 0x8a, 0x8c, 0xcd, 0xb2, 0x6d, 0xf2, 0x60, 0x9c, 0xe8, 0x32, - 0xd9, 0x95, 0x6a, 0xc8, 0x46, 0x16, 0xdd, 0x61, 0x50, 0x04, 0x74, 0xe8, 0x1d, 0x67, 0x04, 0x2e, - 0x81, 0x13, 0x21, 0x01, 0x89, 0x46, 0xa4, 0x6c, 0x28, 0x88, 0x3a, 0x67, 0x50, 0x3c, 0x1e, 0x88, - 0x2e, 0x7b, 0x53, 0xf0, 0x3b, 0x20, 0x6b, 0xa0, 0xc7, 0xb6, 0x64, 0x21, 0x53, 0x47, 0x86, 0x46, - 0x76, 0x25, 0x45, 0x36, 0x54, 0xc7, 0x58, 0x44, 0x3d, 0x33, 0xbe, 0x94, 0x2b, 0xba, 0x2f, 0x74, - 0xd1, 0x7b, 0xa1, 0x8b, 0x9b, 0xde, 0x0b, 0x5d, 0x1a, 0x75, 0xf2, 0xfc, 0xb3, 0xbf, 0xe4, 0x39, - 0xf1, 0xa4, 0x83, 0x22, 0x7a, 0x20, 0x65, 0x0f, 0x83, 0xbf, 0x04, 0xe6, 0xa9, 0x49, 0x22, 0xaa, - 0x6a, 0xc4, 0x46, 0x16, 0x52, 0x83, 0x0c, 0xf2, 0x48, 0xb6, 0xd4, 0x15, 0x64, 0xe0, 0x9a, 0x9f, - 0xc2, 0x6e, 0x82, 0x8b, 0xa9, 0xa4, 0x99, 0x47, 0x4e, 0x82, 0x11, 0x95, 0x8e, 0xd0, 0x57, 0x61, - 0x4c, 0x64, 0x5f, 0xfc, 0x2c, 0x7b, 0xe7, 0xdc, 0xec, 0x84, 0x54, 0x9a, 0x8c, 0x2a, 0x2b, 0xfe, - 0x36, 0xef, 0x73, 0xe0, 0x74, 0x1b, 0x01, 0x86, 0xfc, 0x10, 0x4c, 0x98, 0xe1, 0x39, 0xef, 0xdd, - 0x59, 0x4a, 0x95, 0x24, 0x23, 0xb0, 0xec, 0x31, 0x8c, 0xe1, 0xf1, 0x06, 0x38, 0x1a, 0x11, 0x83, - 0x33, 0x80, 0x05, 0xf8, 0x4a, 0x6b, 0xcc, 0xaf, 0xc0, 0x59, 0x00, 0xbc, 0x04, 0x5b, 0x59, 0xa1, - 0x07, 0x3a, 0x24, 0x86, 0x46, 0x3a, 0x06, 0x35, 0xbf, 0x0f, 0x04, 0x6a, 0xf2, 0xb2, 0xae, 0xaf, - 0xcb, 0x9a, 0x45, 0x1e, 0xc8, 0x7a, 0x19, 0x1b, 0x4e, 0x5c, 0x96, 0xa2, 0x0f, 0x46, 0x65, 0xe5, - 0xb0, 0xca, 0x8d, 0x5f, 0x70, 0x60, 0x21, 0xfd, 0x9e, 0xcc, 0xf3, 0xfb, 0xe0, 0x35, 0x53, 0xd6, - 0x2c, 0xa9, 0x21, 0xeb, 0x4e, 0x8d, 0x46, 0x2f, 0x14, 0x73, 0xfe, 0x6a, 0x3a, 0xe7, 0xcb, 0x9a, - 0x15, 0x6c, 0xe4, 0x5f, 0x58, 0x23, 0x08, 0xa5, 0x09, 0x33, 0x22, 0xc2, 0xff, 0x87, 0x03, 0x67, - 0x3a, 0xae, 0x82, 0xab, 0xed, 0x6e, 0x79, 0x69, 0xfa, 0xcb, 0xe7, 0xf9, 0x29, 0x37, 0xeb, 0xc4, - 0x25, 0x12, 0xd2, 0xef, 0x6a, 0xdb, 0xec, 0x15, 0xc2, 0x89, 0x4b, 0x24, 0xa4, 0xb1, 0xeb, 0xe0, - 0x15, 0x5f, 0x6a, 0x0f, 0x35, 0xd9, 0x6d, 0x9d, 0x29, 0x06, 0x15, 0x6a, 0xd1, 0xad, 0x50, 0x8b, - 0xeb, 0xf5, 0x1d, 0x5d, 0x53, 0xd6, 0x50, 0x53, 0xf4, 0x0f, 0x6c, 0x0d, 0x35, 0xf9, 0x49, 0x00, - 0xdd, 0x4b, 0x20, 0x5b, 0x72, 0x70, 0x05, 0x1f, 0x82, 0xe3, 0x91, 0x51, 0x76, 0x2c, 0x15, 0x30, - 0x62, 0xd2, 0x11, 0x56, 0x2d, 0x5c, 0x4c, 0x79, 0x16, 0xce, 0x12, 0x76, 0x03, 0x18, 0x00, 0xaf, - 0xb3, 0x94, 0x10, 0x89, 0x80, 0x7b, 0xa6, 0x8d, 0xd4, 0x8a, 0xe1, 0x27, 0xda, 0x43, 0xab, 0x79, - 0xf7, 0x59, 0x4a, 0xe9, 0xb4, 0x9b, 0x5f, 0x68, 0x9e, 0x0e, 0x17, 0x0e, 0xb1, 0xe3, 0x44, 0x5e, - 0xa6, 0x99, 0x0e, 0x55, 0x10, 0xd1, 0xf3, 0x45, 0x84, 0x7f, 0x08, 0x66, 0x23, 0x5b, 0x1e, 0xbe, - 0x51, 0x3f, 0x39, 0x02, 0xe6, 0xda, 0x6c, 0xe1, 0xff, 0x95, 0x58, 0x26, 0x70, 0xe9, 0xcb, 0x84, - 0x78, 0x7c, 0x65, 0xba, 0x8c, 0x2f, 0x98, 0x05, 0xc3, 0xb4, 0xf0, 0xa2, 0x91, 0x39, 0x48, 0x2d, - 0x74, 0x07, 0xe0, 0x15, 0x30, 0x64, 0x39, 0x0f, 0xcc, 0x10, 0xd5, 0xe6, 0xbc, 0x13, 0x1d, 0x7f, - 0x7a, 0x9e, 0x9f, 0x76, 0x5b, 0x24, 0xa2, 0xee, 0x15, 0x35, 0x2c, 0xd4, 0x64, 0x7b, 0xb7, 0x78, - 0x07, 0x55, 0x65, 0xa5, 0xb9, 0x82, 0x94, 0x2c, 0x27, 0xd2, 0x25, 0xf0, 0x3c, 0x98, 0xf0, 0xb5, - 0x72, 0xd1, 0x87, 0xe9, 0xe3, 0x76, 0xd4, 0x1b, 0xa5, 0x05, 0x1d, 0xdc, 0x06, 0x59, 0x5f, 0x4c, - 0xc1, 0xb5, 0x9a, 0x46, 0x88, 0x86, 0x0d, 0x89, 0xee, 0x3a, 0x42, 0x77, 0x3d, 0x9b, 0x62, 0x57, - 0xf1, 0xa4, 0x07, 0x52, 0xf6, 0x31, 0x44, 0x47, 0x8b, 0x6d, 0x90, 0xf5, 0x5d, 0x1b, 0x87, 0x3f, - 0xd2, 0x05, 0xbc, 0x07, 0x12, 0x83, 0x5f, 0x03, 0xe3, 0x2a, 0x22, 0x8a, 0xa5, 0x99, 0x4e, 0x5b, - 0x90, 0x1d, 0xa5, 0x9e, 0x3f, 0x5b, 0x64, 0x0d, 0xa5, 0xd7, 0x32, 0xb2, 0x16, 0xb2, 0xb8, 0x12, - 0x88, 0xb2, 0x9b, 0x16, 0x5e, 0x0d, 0xb7, 0xc1, 0x29, 0x5f, 0x57, 0x6c, 0x22, 0x8b, 0x16, 0xb8, - 0x5e, 0x3c, 0x8c, 0x51, 0x65, 0xcf, 0x7c, 0xfe, 0xf1, 0xe5, 0xd3, 0x0c, 0xdd, 0x8f, 0x1f, 0x16, - 0x07, 0x1b, 0xb6, 0xa5, 0x19, 0x55, 0x71, 0xca, 0xc3, 0xb8, 0xc7, 0x20, 0xbc, 0x30, 0x39, 0x09, - 0x46, 0xbe, 0x27, 0x6b, 0x3a, 0x52, 0xb3, 0x60, 0x8e, 0x2b, 0x8c, 0x8a, 0xec, 0x0b, 0x5e, 0x05, - 0x23, 0x4e, 0x0f, 0x59, 0x27, 0xd9, 0xf1, 0x39, 0xae, 0x30, 0xb1, 0xc4, 0xb7, 0x53, 0xbf, 0x84, - 0x0d, 0x75, 0x83, 0x4a, 0x8a, 0x6c, 0x05, 0xdc, 0x04, 0x7e, 0x34, 0x4a, 0x36, 0xde, 0x43, 0x06, - 0xc9, 0xbe, 0x42, 0x15, 0xbd, 0xc8, 0xbc, 0x7a, 0xa2, 0xd5, 0xab, 0x15, 0xc3, 0xfe, 0xfc, 0xe3, - 0xcb, 0x80, 0x6d, 0x52, 0x31, 0x6c, 0xfa, 0xe2, 0x52, 0x8c, 0x4d, 0x0a, 0xe1, 0x84, 0x8e, 0x8f, - 0xea, 0x86, 0xce, 0x51, 0x37, 0x74, 0xbc, 0x51, 0x37, 0x74, 0xbe, 0x06, 0xa6, 0xd8, 0xe5, 0x46, - 0x44, 0x52, 0xea, 0x96, 0xe5, 0xf4, 0x28, 0xc8, 0xc4, 0xca, 0x6e, 0x76, 0x82, 0x5a, 0x78, 0xc2, - 0x9f, 0x2e, 0xbb, 0xb3, 0x37, 0x9d, 0x49, 0xa7, 0x67, 0xcc, 0xb7, 0xbd, 0xf6, 0x2c, 0xbb, 0x20, - 0x00, 0x82, 0xc4, 0xc1, 0x5e, 0xb5, 0x9b, 0xa9, 0x32, 0x69, 0xa7, 0xdb, 0x2e, 0x86, 0x80, 0xf9, - 0x7d, 0xf6, 0xee, 0x46, 0x9b, 0x69, 0x5f, 0xf6, 0xb6, 0x4c, 0x36, 0x31, 0xfb, 0xf2, 0x8a, 0xcf, - 0x3e, 0xb3, 0x05, 0x2f, 0x83, 0xc5, 0x2e, 0xb6, 0x64, 0xee, 0xb8, 0x04, 0x60, 0x70, 0x4b, 0x59, - 0x3e, 0xf4, 0x32, 0xac, 0xff, 0x48, 0xba, 0x05, 0x82, 0x4a, 0x7b, 0x87, 0x8b, 0xc9, 0xdd, 0x48, - 0xf4, 0xfa, 0xfc, 0x7f, 0x74, 0x51, 0x7c, 0x15, 0x5c, 0x4a, 0xa7, 0x2d, 0x73, 0xc6, 0x9b, 0x2c, - 0x29, 0x72, 0xe9, 0xf3, 0x07, 0x5d, 0xc0, 0xf3, 0xec, 0x2d, 0x28, 0xe9, 0x58, 0xd9, 0x23, 0xf7, - 0x0d, 0x5b, 0xd3, 0xef, 0xa2, 0xc7, 0x6e, 0x54, 0x7a, 0xaf, 0xfa, 0x16, 0x6b, 0xbb, 0x92, 0x65, - 0x98, 0x06, 0x6f, 0x80, 0xa9, 0x1d, 0x3a, 0x2f, 0xd5, 0x1d, 0x01, 0x89, 0x36, 0x06, 0x6e, 0xe4, - 0x73, 0xb4, 0xe0, 0x9c, 0xdc, 0x49, 0x58, 0xce, 0x2f, 0xb3, 0x26, 0xa9, 0xec, 0xdb, 0xbe, 0x6a, - 0xe1, 0x5a, 0x99, 0xf5, 0xf2, 0xde, 0x69, 0x44, 0xfa, 0x7d, 0x2e, 0xda, 0xef, 0xf3, 0xab, 0xe0, - 0xec, 0x81, 0x10, 0x41, 0x07, 0x14, 0xf6, 0x39, 0x17, 0xf7, 0xf9, 0xd2, 0x87, 0xe7, 0xc0, 0x30, - 0x05, 0x82, 0xbf, 0xcc, 0x80, 0xc9, 0x24, 0xae, 0x0b, 0xde, 0xe8, 0xfe, 0xba, 0x45, 0x59, 0xb8, - 0xdc, 0x72, 0x1f, 0x08, 0xae, 0x21, 0xfc, 0x8f, 0xb8, 0xef, 0x7f, 0xf1, 0xb7, 0x9f, 0x66, 0x7e, - 0xc0, 0x6d, 0x95, 0xe0, 0x8d, 0xce, 0x5c, 0xac, 0x6f, 0x34, 0x23, 0xd4, 0x84, 0x27, 0x21, 0x37, - 0x3c, 0x85, 0xd7, 0x7a, 0x42, 0x60, 0x57, 0xe3, 0x29, 0xfc, 0x82, 0x63, 0x25, 0x5f, 0xf4, 0xee, - 0xc2, 0xeb, 0xdd, 0xdb, 0x19, 0xe1, 0xf4, 0x72, 0x37, 0x7a, 0x07, 0x60, 0x7e, 0xba, 0x42, 0xdd, - 0xf4, 0x3a, 0x5c, 0xec, 0xc2, 0x42, 0x97, 0xed, 0x83, 0xef, 0x67, 0x40, 0xb6, 0x0d, 0x85, 0x47, - 0xe0, 0x9d, 0x1e, 0x35, 0x4b, 0x64, 0x0b, 0x73, 0xef, 0x1c, 0x12, 0x1a, 0x33, 0xfa, 0x36, 0x35, - 0xba, 0xbb, 0xc0, 0x60, 0x42, 0x0e, 0xa0, 0xe4, 0x13, 0x71, 0xf0, 0xbf, 0x1c, 0x98, 0x4a, 0x66, - 0x04, 0x09, 0x5c, 0xeb, 0x59, 0xe9, 0x56, 0xea, 0x31, 0x77, 0xe7, 0x70, 0xc0, 0x98, 0x03, 0x6e, - 0x51, 0x07, 0x2c, 0xc3, 0xeb, 0x3d, 0x38, 0x00, 0x9b, 0x21, 0xfb, 0xff, 0xe5, 0x11, 0x2a, 0x89, - 0xfc, 0x15, 0x5c, 0x4d, 0xaf, 0xf5, 0x41, 0x74, 0x5d, 0xee, 0x56, 0xdf, 0x38, 0xcc, 0xf0, 0x65, - 0x6a, 0xf8, 0xd7, 0xe1, 0x95, 0x14, 0x3f, 0xcf, 0xf8, 0x5c, 0x65, 0xa4, 0x55, 0x4c, 0x30, 0x39, - 0xdc, 0x9f, 0xf4, 0x64, 0x72, 0x02, 0x43, 0xd7, 0x93, 0xc9, 0x49, 0xdc, 0x59, 0x6f, 0x26, 0x47, - 0xde, 0x6d, 0xf8, 0x7b, 0x8e, 0x35, 0xb2, 0x11, 0xda, 0x0c, 0xbe, 0x9d, 0x5e, 0xc5, 0x24, 0x36, - 0x2e, 0x77, 0xbd, 0xe7, 0xf5, 0xcc, 0xb4, 0xb7, 0xa8, 0x69, 0x4b, 0x70, 0xa1, 0xb3, 0x69, 0x36, - 0x03, 0x70, 0x7f, 0x76, 0x81, 0x3f, 0xcb, 0xb0, 0xf7, 0xf0, 0x60, 0x1e, 0x0c, 0xde, 0x4b, 0xaf, - 0x62, 0x2a, 0xfe, 0x2d, 0xb7, 0x7e, 0x78, 0x80, 0xcc, 0x09, 0x6b, 0xd4, 0x09, 0x37, 0x61, 0xb9, - 0xb3, 0x13, 0x2c, 0x1f, 0x31, 0x88, 0x69, 0x8b, 0x62, 0x4a, 0x2e, 0xaf, 0x07, 0xff, 0xd1, 0xc2, - 0xdb, 0x45, 0x49, 0x24, 0x02, 0xbb, 0x78, 0x9b, 0xdb, 0x90, 0x83, 0xb9, 0x52, 0x3f, 0x10, 0xcc, - 0xea, 0x12, 0xb5, 0xfa, 0x1b, 0xf0, 0x6a, 0x67, 0xab, 0x3d, 0x5a, 0x50, 0x8a, 0x3f, 0x60, 0x9f, - 0x64, 0xd8, 0x6f, 0x50, 0x29, 0xd8, 0x33, 0xb8, 0x99, 0x5e, 0xe9, 0xf4, 0x04, 0x60, 0xee, 0xfe, - 0x21, 0xa3, 0x32, 0xef, 0x54, 0xa9, 0x77, 0xe4, 0xad, 0x45, 0x28, 0x74, 0xf6, 0x4f, 0xb4, 0xd4, - 0xb9, 0x94, 0x66, 0x81, 0x5f, 0xd9, 0xfc, 0x9a, 0x03, 0xe3, 0x21, 0x32, 0x0b, 0xbe, 0xd9, 0xc5, - 0xd1, 0x86, 0x49, 0xb1, 0xdc, 0x5b, 0xdd, 0x2f, 0x64, 0xb6, 0x2e, 0x50, 0x5b, 0xe7, 0x61, 0x21, - 0x45, 0x24, 0xb8, 0x4a, 0xfe, 0x39, 0x13, 0x2b, 0x86, 0x93, 0x19, 0xab, 0x6e, 0x2e, 0x7f, 0x2a, - 0xa6, 0xad, 0x9b, 0xcb, 0x9f, 0x8e, 0x4c, 0xe3, 0x9f, 0xb9, 0x65, 0xee, 0x87, 0xdc, 0x56, 0xaa, - 0x04, 0x80, 0x1d, 0x20, 0x49, 0x33, 0xa4, 0xa0, 0x95, 0x8d, 0x1d, 0xff, 0x8d, 0x5e, 0x41, 0xfc, - 0x90, 0xf8, 0x4d, 0x06, 0x5c, 0x48, 0xdd, 0xa8, 0xc2, 0xfb, 0xbd, 0x56, 0xb0, 0x07, 0xf6, 0xda, - 0xb9, 0x07, 0x87, 0x0d, 0xcb, 0xfc, 0xbd, 0x45, 0xdd, 0xbd, 0x09, 0xc5, 0xae, 0xcb, 0x65, 0xc9, - 0x44, 0x56, 0xe0, 0x31, 0xe1, 0x49, 0xbc, 0x33, 0x7e, 0x0a, 0x7f, 0x3c, 0x08, 0xce, 0xa5, 0xe9, - 0x67, 0xe1, 0x7a, 0x1f, 0xd5, 0x50, 0x62, 0x23, 0x9f, 0x7b, 0xf7, 0x10, 0x11, 0x99, 0xa7, 0x3e, - 0x71, 0x23, 0xf3, 0x77, 0xdc, 0xd6, 0x36, 0x7c, 0xaf, 0x1b, 0x6f, 0x45, 0xc9, 0xbe, 0x68, 0x78, - 0x26, 0xb9, 0xed, 0x5b, 0x7d, 0x81, 0x7b, 0x61, 0x9b, 0x84, 0xfc, 0xdb, 0x4c, 0xac, 0xb8, 0x0f, - 0xe5, 0x86, 0x72, 0x3f, 0x9c, 0x92, 0xe7, 0xf6, 0x95, 0xfe, 0x40, 0x7a, 0xcb, 0x01, 0xbe, 0x33, - 0xfa, 0xc9, 0x01, 0xc9, 0x20, 0x7e, 0x0e, 0xf8, 0x27, 0xc7, 0x7e, 0x85, 0x4d, 0x62, 0x43, 0x60, - 0x17, 0x7c, 0xdc, 0x01, 0x8c, 0x4b, 0x6e, 0xb5, 0x5f, 0x98, 0xee, 0x0b, 0xe4, 0x36, 0xe4, 0x0d, - 0xfc, 0x37, 0x17, 0xfb, 0xe7, 0x9a, 0x28, 0xbd, 0x02, 0x6f, 0x75, 0x7f, 0xd0, 0x89, 0x1c, 0x4f, - 0xee, 0x76, 0xff, 0x40, 0xdd, 0x5b, 0x1d, 0x0a, 0x0e, 0xe1, 0x89, 0x4f, 0x31, 0x3d, 0x2d, 0x7d, - 0xf3, 0xd3, 0x17, 0xb3, 0xdc, 0x67, 0x2f, 0x66, 0xb9, 0xbf, 0xbe, 0x98, 0xe5, 0x9e, 0xbd, 0x9c, - 0x1d, 0xf8, 0xec, 0xe5, 0xec, 0xc0, 0x1f, 0x5f, 0xce, 0x0e, 0x6c, 0x5d, 0xab, 0x6a, 0xf6, 0x6e, - 0x7d, 0xa7, 0xa8, 0xe0, 0x1a, 0xfb, 0x27, 0xad, 0xd0, 0x2e, 0x97, 0xfd, 0x5d, 0x1a, 0x6f, 0x08, - 0x8f, 0x63, 0x65, 0x7a, 0xd3, 0x44, 0x64, 0x67, 0x84, 0xfe, 0x10, 0xfe, 0xfa, 0xff, 0x02, 0x00, - 0x00, 0xff, 0xff, 0x69, 0x3e, 0x82, 0x9f, 0x44, 0x27, 0x00, 0x00, + // 2547 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xdb, 0x6f, 0x1c, 0x49, + 0xd5, 0x77, 0x8f, 0x2f, 0xb1, 0xcb, 0x89, 0xb3, 0x5b, 0xb9, 0x4d, 0xc6, 0x8e, 0xc7, 0xe9, 0x6c, + 0xbe, 0xcf, 0x71, 0x92, 0x19, 0xdb, 0xab, 0x65, 0x37, 0x81, 0x6c, 0xe2, 0x19, 0xc7, 0xd9, 0x21, + 0x37, 0x6f, 0xc7, 0x09, 0xc8, 0xab, 0xd0, 0x69, 0x77, 0x17, 0xe3, 0xc6, 0x3d, 0x5d, 0xed, 0xae, + 0x9a, 0x49, 0x46, 0x51, 0x24, 0x6e, 0x0f, 0x61, 0x41, 0x10, 0x84, 0x90, 0x78, 0xdc, 0x17, 0x24, + 0x1e, 0x90, 0x90, 0xd0, 0x0a, 0xc4, 0xdb, 0x3e, 0xee, 0x1b, 0xcb, 0xee, 0x0b, 0x02, 0x29, 0xa0, + 0x84, 0x07, 0x84, 0x84, 0x84, 0x16, 0xfe, 0x00, 0xd4, 0xd5, 0xd5, 0xd7, 0xe9, 0x19, 0xf7, 0x5c, + 0x1e, 0x78, 0x73, 0x57, 0x9d, 0xfa, 0xd5, 0x39, 0xa7, 0xce, 0x39, 0x75, 0xea, 0xe7, 0x01, 0x45, + 0xdd, 0xa4, 0xc8, 0x56, 0xb7, 0x15, 0xdd, 0x94, 0x09, 0x52, 0xeb, 0xb6, 0x4e, 0x9b, 0x45, 0x55, + 0x6d, 0x14, 0x2d, 0x1b, 0x37, 0x74, 0x0d, 0xd9, 0xc5, 0xc6, 0x52, 0x71, 0xb7, 0x8e, 0xec, 0x66, + 0xc1, 0xb2, 0x31, 0xc5, 0xf0, 0x54, 0xc2, 0x82, 0x82, 0xaa, 0x36, 0x0a, 0xde, 0x82, 0x42, 0x63, + 0x29, 0x37, 0x53, 0xc5, 0xb8, 0x6a, 0xa0, 0xa2, 0x62, 0xe9, 0x45, 0xc5, 0x34, 0x31, 0x55, 0xa8, + 0x8e, 0x4d, 0xe2, 0x42, 0xe4, 0x0e, 0x57, 0x71, 0x15, 0xb3, 0x3f, 0x8b, 0xce, 0x5f, 0x7c, 0x34, + 0xcf, 0xd7, 0xb0, 0xaf, 0xad, 0xfa, 0xd7, 0x8b, 0x54, 0xaf, 0x21, 0x42, 0x95, 0x9a, 0xc5, 0x05, + 0x96, 0xd3, 0xa8, 0xea, 0x6b, 0xe1, 0xae, 0x59, 0x6c, 0xb7, 0xa6, 0xb1, 0x54, 0x24, 0xdb, 0x8a, + 0x8d, 0x34, 0x59, 0xc5, 0x26, 0xa9, 0xd7, 0xfc, 0x15, 0xa7, 0x3b, 0xac, 0x78, 0xa8, 0xdb, 0x88, + 0x8b, 0xcd, 0x50, 0x64, 0x6a, 0xc8, 0xae, 0xe9, 0x26, 0x2d, 0xaa, 0x76, 0xd3, 0xa2, 0xb8, 0xb8, + 0x83, 0x9a, 0x9e, 0x85, 0xc7, 0x55, 0x4c, 0x6a, 0x98, 0xc8, 0xae, 0x91, 0xee, 0x07, 0x9f, 0x7a, + 0xcd, 0xfd, 0x2a, 0x12, 0xaa, 0xec, 0xe8, 0x66, 0xb5, 0xd8, 0x58, 0xda, 0x42, 0x54, 0x59, 0xf2, + 0xbe, 0x5d, 0x29, 0xf1, 0x3e, 0x98, 0x7e, 0xd7, 0x71, 0x7a, 0x99, 0x2b, 0x77, 0x0d, 0x99, 0x88, + 0xe8, 0x44, 0x42, 0xbb, 0x75, 0x44, 0x28, 0x3c, 0x01, 0xc6, 0x5d, 0x0d, 0x75, 0x2d, 0x2b, 0xcc, + 0x09, 0xf3, 0x13, 0xa5, 0x4c, 0x56, 0x90, 0xf6, 0xb1, 0xb1, 0x8a, 0x06, 0xf3, 0x60, 0xd2, 0xb3, + 0xca, 0x91, 0xc8, 0x38, 0x12, 0x12, 0xf0, 0x86, 0x2a, 0x9a, 0xf8, 0x18, 0xcc, 0x24, 0xc3, 0x13, + 0x0b, 0x9b, 0x04, 0xc1, 0xf7, 0xc0, 0x81, 0xaa, 0x3b, 0x24, 0x13, 0xaa, 0x50, 0xc4, 0x36, 0x99, + 0x5c, 0x5e, 0x2c, 0xb4, 0x3b, 0xfc, 0xc6, 0x52, 0x21, 0x86, 0x75, 0xc7, 0x59, 0x57, 0x1a, 0xf9, + 0xf8, 0x79, 0x7e, 0x48, 0xda, 0x5f, 0x0d, 0x8d, 0x89, 0x33, 0x20, 0x17, 0xd9, 0xbc, 0xec, 0xc0, + 0x79, 0xa6, 0x89, 0x4a, 0xcc, 0x72, 0x6f, 0x96, 0x6b, 0x56, 0x02, 0x63, 0x6c, 0x7b, 0x92, 0x15, + 0xe6, 0x86, 0xe7, 0x27, 0x97, 0x17, 0x0a, 0x29, 0xe2, 0xb1, 0xc0, 0x40, 0x24, 0xbe, 0x52, 0x3c, + 0x03, 0xfe, 0xbf, 0x75, 0x8b, 0x3b, 0x54, 0xb1, 0xe9, 0xba, 0x8d, 0x2d, 0x4c, 0x14, 0xc3, 0xd7, + 0xe6, 0x07, 0x02, 0x98, 0xdf, 0x5b, 0x96, 0xeb, 0xf6, 0x00, 0x4c, 0x58, 0xde, 0x20, 0xf7, 0xd8, + 0xdb, 0xe9, 0xd4, 0xe3, 0xe0, 0x2b, 0x9a, 0xa6, 0x3b, 0x89, 0xe2, 0x43, 0xb3, 0x63, 0x0d, 0x40, + 0xc5, 0x85, 0x98, 0x36, 0x64, 0x63, 0x5b, 0xa1, 0x2b, 0x36, 0x5a, 0xd9, 0xc2, 0x75, 0xba, 0x81, + 0x99, 0x5e, 0x9e, 0xea, 0xb7, 0xc0, 0x99, 0x14, 0xb2, 0x5c, 0xf5, 0x93, 0x60, 0x7f, 0x28, 0x62, + 0x5c, 0xe7, 0x4e, 0x48, 0x93, 0x41, 0xc8, 0x10, 0x71, 0x1e, 0xfc, 0x5f, 0x92, 0x27, 0xb0, 0xd5, + 0xe2, 0xb4, 0xf7, 0x85, 0x64, 0x07, 0x47, 0x44, 0xf9, 0xc6, 0x72, 0xab, 0xcf, 0x2e, 0x75, 0xe5, + 0x33, 0x09, 0xd5, 0x70, 0x43, 0x31, 0xda, 0xba, 0x2c, 0x7e, 0xd8, 0x2d, 0x6e, 0xc0, 0x96, 0xa7, + 0xf7, 0xcd, 0xbd, 0xbc, 0xeb, 0x88, 0xa6, 0x77, 0xd8, 0xcf, 0x32, 0x60, 0x94, 0x59, 0x0e, 0x8f, + 0xc7, 0xd3, 0x35, 0x48, 0xd5, 0x69, 0x30, 0xa1, 0x1a, 0x3a, 0x32, 0x69, 0x90, 0xa8, 0xe3, 0xee, + 0x40, 0x45, 0x83, 0x87, 0xc0, 0x28, 0xc5, 0x96, 0x7c, 0x2b, 0x3b, 0x3c, 0x27, 0xcc, 0x1f, 0x90, + 0x46, 0x28, 0xb6, 0x6e, 0xc1, 0x05, 0x00, 0x6b, 0xba, 0x29, 0x5b, 0xf8, 0xa1, 0xb3, 0xb5, 0x29, + 0xbb, 0x12, 0x23, 0x73, 0xc2, 0xfc, 0xb0, 0x34, 0x55, 0xd3, 0xcd, 0x75, 0x67, 0xa2, 0x62, 0x6e, + 0x38, 0xb2, 0x8b, 0xe0, 0x70, 0x43, 0x31, 0x74, 0x4d, 0xa1, 0xd8, 0x26, 0x7c, 0x89, 0xaa, 0x58, + 0xd9, 0x51, 0x86, 0x07, 0x83, 0x39, 0xb6, 0xa8, 0xac, 0x58, 0x70, 0x01, 0xbc, 0xea, 0x8f, 0xca, + 0x04, 0x51, 0x26, 0x3e, 0xc6, 0xc4, 0x0f, 0xfa, 0x13, 0x77, 0x10, 0x75, 0x64, 0x67, 0xc0, 0x84, + 0x62, 0x18, 0xf8, 0xa1, 0xa1, 0x13, 0x9a, 0xdd, 0xc7, 0x1c, 0x10, 0x0c, 0xc0, 0x1c, 0x18, 0xd7, + 0x90, 0xd9, 0x64, 0x93, 0xe3, 0x6c, 0xd2, 0xff, 0x16, 0x7f, 0x29, 0x80, 0x93, 0xcc, 0xd5, 0xf7, + 0x3c, 0xc8, 0x50, 0x0a, 0xd8, 0x29, 0xab, 0xdc, 0x25, 0xf0, 0x8a, 0x17, 0x10, 0xb2, 0xa2, 0x69, + 0x36, 0x22, 0xc4, 0xf5, 0x60, 0x09, 0x7e, 0xfe, 0x3c, 0x3f, 0xd5, 0x54, 0x6a, 0xc6, 0x45, 0x91, + 0x4f, 0x88, 0xd2, 0x41, 0x4f, 0x76, 0xc5, 0x1d, 0x89, 0x17, 0xc9, 0xe1, 0x78, 0x91, 0xbc, 0x38, + 0xfe, 0xf4, 0x83, 0xfc, 0xd0, 0xdf, 0x3f, 0xc8, 0x0f, 0x89, 0xb7, 0x81, 0xd8, 0x49, 0x5b, 0x1e, + 0x12, 0x67, 0xc0, 0x2b, 0x3e, 0xa0, 0xa7, 0x8f, 0x7b, 0xda, 0x07, 0xd5, 0x90, 0xbc, 0xa3, 0x4d, + 0xab, 0xfd, 0xeb, 0x21, 0xed, 0xd2, 0xdb, 0xdf, 0xb2, 0x5f, 0x07, 0xfb, 0x63, 0x3a, 0xf4, 0x65, + 0x7f, 0x54, 0xdb, 0xc0, 0xfe, 0x96, 0xf3, 0xe0, 0xf6, 0xc7, 0x7c, 0x2f, 0x4e, 0x83, 0xe3, 0x0c, + 0x70, 0x63, 0xdb, 0xc6, 0x94, 0x1a, 0x88, 0x5d, 0x0c, 0x5e, 0x1a, 0xfe, 0x41, 0xe0, 0x17, 0x44, + 0x6c, 0x96, 0x6f, 0x93, 0x07, 0x93, 0xc4, 0x50, 0xc8, 0xb6, 0x5c, 0x43, 0x14, 0xd9, 0x6c, 0x87, + 0x61, 0x09, 0xb0, 0xa1, 0x9b, 0xce, 0x08, 0x5c, 0x06, 0x47, 0x42, 0x02, 0x32, 0x8b, 0x48, 0xc5, + 0x54, 0x11, 0x73, 0xce, 0xb0, 0x74, 0x28, 0x10, 0x5d, 0xf1, 0xa6, 0xe0, 0xd7, 0x40, 0xd6, 0x44, + 0x8f, 0xa8, 0x6c, 0x23, 0xcb, 0x40, 0xa6, 0x4e, 0xb6, 0x65, 0x55, 0x31, 0x35, 0xc7, 0x58, 0xc4, + 0x3c, 0x33, 0xb9, 0x9c, 0x2b, 0xb8, 0xfd, 0x49, 0xc1, 0xeb, 0x4f, 0x0a, 0x1b, 0x5e, 0x7f, 0x52, + 0x1a, 0x77, 0x6e, 0xb9, 0x67, 0x7f, 0xc9, 0x0b, 0xd2, 0x51, 0x07, 0x45, 0xf2, 0x40, 0xca, 0x1e, + 0x86, 0x78, 0x0e, 0x2c, 0x30, 0x93, 0x24, 0x54, 0xd5, 0x09, 0x45, 0x36, 0xd2, 0x82, 0xfa, 0xf5, + 0x50, 0xb1, 0xb5, 0x55, 0x64, 0xe2, 0x9a, 0x5f, 0x40, 0xaf, 0x82, 0xb3, 0xa9, 0xa4, 0xb9, 0x47, + 0x8e, 0x82, 0x31, 0x8d, 0x8d, 0xf0, 0x2a, 0xc4, 0xbf, 0xc4, 0x59, 0x7e, 0xcb, 0xbb, 0xb5, 0x11, + 0x69, 0xac, 0x18, 0x55, 0x56, 0xfd, 0x6d, 0xbe, 0x25, 0x80, 0x13, 0x6d, 0x04, 0xfc, 0x1b, 0x6d, + 0xca, 0x0a, 0xcf, 0x79, 0xb7, 0xee, 0x72, 0xaa, 0x12, 0x1d, 0x81, 0xe5, 0xad, 0x40, 0x0c, 0x4f, + 0x34, 0xc1, 0x81, 0x88, 0x18, 0x9c, 0x01, 0x3c, 0xc0, 0x57, 0x5b, 0x63, 0x7e, 0x15, 0xce, 0x02, + 0xe0, 0x95, 0xf6, 0xca, 0x2a, 0x3b, 0xd0, 0x11, 0x29, 0x34, 0xb2, 0x67, 0x50, 0x8b, 0xbb, 0xa0, + 0xc8, 0x4c, 0x5e, 0x31, 0x8c, 0x75, 0x45, 0xb7, 0xc9, 0x3d, 0xc5, 0x28, 0x63, 0xd3, 0x89, 0xcb, + 0x52, 0xf4, 0xba, 0xaa, 0xac, 0x0e, 0xaa, 0xd9, 0xfa, 0xb9, 0x00, 0x16, 0xd3, 0xef, 0xc9, 0x3d, + 0xbf, 0x0b, 0x5e, 0xb5, 0x14, 0xdd, 0x96, 0x1b, 0x8a, 0xe1, 0x74, 0xa8, 0x2c, 0xa1, 0xb8, 0xf3, + 0xd7, 0xd2, 0x39, 0x5f, 0xd1, 0xed, 0x60, 0x23, 0x3f, 0x61, 0xcd, 0x20, 0x94, 0xa6, 0xac, 0x88, + 0x88, 0xf8, 0x1f, 0x01, 0x9c, 0xdc, 0x73, 0x15, 0x5c, 0x6b, 0x97, 0xe5, 0xa5, 0xe9, 0xcf, 0x9f, + 0xe7, 0x8f, 0xb9, 0x55, 0x27, 0x2e, 0x91, 0x50, 0x7e, 0xd7, 0xda, 0x56, 0xaf, 0x10, 0x4e, 0x5c, + 0x22, 0xa1, 0x8c, 0x5d, 0x0e, 0x5d, 0xc4, 0x3b, 0xa8, 0xc9, 0xb3, 0x75, 0xa6, 0x10, 0xf4, 0xe7, + 0x05, 0xb7, 0x3f, 0x2f, 0xac, 0xd7, 0xb7, 0x0c, 0x5d, 0xbd, 0x8e, 0x9a, 0xc1, 0x35, 0x7d, 0x1d, + 0x35, 0xc5, 0xc3, 0x00, 0xba, 0x49, 0xa0, 0xd8, 0x4a, 0x90, 0x82, 0x0f, 0xc0, 0xa1, 0xc8, 0x28, + 0x3f, 0x96, 0x0a, 0x18, 0xb3, 0xd8, 0x08, 0xef, 0x55, 0xce, 0xa6, 0x3c, 0x0b, 0x67, 0x09, 0xcf, + 0x00, 0x0e, 0x20, 0x1a, 0xbc, 0x24, 0x44, 0x22, 0xe0, 0xb6, 0x45, 0x91, 0x56, 0x31, 0xfd, 0x42, + 0x3b, 0xb0, 0x8e, 0x7f, 0x97, 0x97, 0x94, 0xbd, 0x76, 0xf3, 0xdb, 0xec, 0x13, 0xe1, 0xc6, 0x21, + 0x76, 0x9c, 0xc8, 0xab, 0x34, 0xd3, 0xa1, 0x0e, 0x22, 0x7a, 0xbe, 0x88, 0x88, 0x0f, 0xc0, 0x6c, + 0x64, 0xcb, 0xc1, 0x1b, 0xf5, 0xe3, 0x7d, 0x60, 0xae, 0xcd, 0x16, 0xfe, 0x5f, 0x89, 0x6d, 0x82, + 0x90, 0xbe, 0x4d, 0x88, 0xc7, 0x57, 0xa6, 0xcb, 0xf8, 0x82, 0x59, 0x30, 0xca, 0x1a, 0x2f, 0x16, + 0x99, 0xc3, 0xcc, 0x42, 0x77, 0x00, 0x5e, 0x00, 0x23, 0xb6, 0x73, 0xc1, 0x8c, 0x30, 0x6d, 0x4e, + 0x3b, 0xd1, 0xf1, 0xa7, 0xe7, 0xf9, 0x69, 0xf7, 0x81, 0x48, 0xb4, 0x9d, 0x82, 0x8e, 0x8b, 0x35, + 0x85, 0x6e, 0x17, 0x6e, 0xa0, 0xaa, 0xa2, 0x36, 0x57, 0x91, 0x9a, 0x15, 0x24, 0xb6, 0x04, 0x9e, + 0x06, 0x53, 0xbe, 0x56, 0x2e, 0xfa, 0x28, 0xbb, 0xdc, 0x0e, 0x78, 0xa3, 0xac, 0xa1, 0x83, 0xf7, + 0x41, 0xd6, 0x17, 0x53, 0x71, 0xad, 0xa6, 0x13, 0xa2, 0x63, 0x53, 0x66, 0xbb, 0x8e, 0xb1, 0x5d, + 0x4f, 0xa5, 0xd8, 0x55, 0x3a, 0xea, 0x81, 0x94, 0x7d, 0x0c, 0xc9, 0xd1, 0xe2, 0x3e, 0xc8, 0xfa, + 0xae, 0x8d, 0xc3, 0xef, 0xeb, 0x02, 0xde, 0x03, 0x89, 0xc1, 0x5f, 0x07, 0x93, 0x1a, 0x22, 0xaa, + 0xad, 0x5b, 0xce, 0xa3, 0x28, 0x3b, 0xce, 0x3c, 0x7f, 0xaa, 0xc0, 0x9f, 0xd3, 0xde, 0x83, 0x99, + 0x3f, 0xa0, 0x0b, 0xab, 0x81, 0x28, 0xcf, 0xb4, 0xf0, 0x6a, 0x78, 0x1f, 0x1c, 0xf7, 0x75, 0xc5, + 0x16, 0xb2, 0x59, 0x83, 0xeb, 0xc5, 0xc3, 0x04, 0x53, 0xf6, 0xe4, 0xa7, 0x1f, 0x9e, 0x3f, 0xc1, + 0xd1, 0xfd, 0xf8, 0xe1, 0x71, 0x70, 0x87, 0xda, 0xba, 0x59, 0x95, 0x8e, 0x79, 0x18, 0xb7, 0x39, + 0x84, 0x17, 0x26, 0x47, 0xc1, 0xd8, 0x37, 0x14, 0xdd, 0x40, 0x5a, 0x16, 0xcc, 0x09, 0xf3, 0xe3, + 0x12, 0xff, 0x82, 0x17, 0xc1, 0x98, 0xf3, 0x82, 0xae, 0x93, 0xec, 0xe4, 0x9c, 0x30, 0x3f, 0xb5, + 0x2c, 0xb6, 0x53, 0xbf, 0x84, 0x4d, 0xed, 0x0e, 0x93, 0x94, 0xf8, 0x0a, 0xb8, 0x01, 0xfc, 0x68, + 0x94, 0x29, 0xde, 0x41, 0x26, 0xc9, 0xee, 0x67, 0x8a, 0x9e, 0xe5, 0x5e, 0x3d, 0xd2, 0xea, 0xd5, + 0x8a, 0x49, 0x3f, 0xfd, 0xf0, 0x3c, 0xe0, 0x9b, 0x54, 0x4c, 0xca, 0x6e, 0x5c, 0x86, 0xb1, 0xc1, + 0x20, 0x9c, 0xd0, 0xf1, 0x51, 0xdd, 0xd0, 0x39, 0xe0, 0x86, 0x8e, 0x37, 0xea, 0x86, 0xce, 0x17, + 0xc0, 0x31, 0x9e, 0xdc, 0x88, 0xc8, 0x6a, 0xdd, 0xb6, 0x9d, 0x37, 0x0a, 0xb2, 0xb0, 0xba, 0x9d, + 0x9d, 0x62, 0x16, 0x1e, 0xf1, 0xa7, 0xcb, 0xee, 0xec, 0x55, 0x67, 0x52, 0x7c, 0x2a, 0x80, 0x7c, + 0xdb, 0xb4, 0xe7, 0xd5, 0x05, 0x01, 0x10, 0x14, 0x0e, 0x7e, 0xab, 0x5d, 0x4d, 0x55, 0x49, 0xf7, + 0xca, 0x76, 0x29, 0x04, 0x2c, 0xee, 0xf2, 0x7b, 0x37, 0x4a, 0x25, 0xf8, 0xb2, 0xef, 0x28, 0x64, + 0x03, 0xf3, 0x2f, 0xaf, 0xf9, 0xec, 0xb3, 0x5a, 0x88, 0x0a, 0x58, 0xea, 0x62, 0x4b, 0xee, 0x8e, + 0x73, 0x00, 0x06, 0x59, 0xca, 0xeb, 0xa1, 0x57, 0x61, 0xfd, 0x4b, 0xd2, 0x6d, 0x10, 0x34, 0xf6, + 0x76, 0x38, 0x9b, 0xfc, 0x1a, 0x89, 0xa6, 0xcf, 0xff, 0xc6, 0x2b, 0x4a, 0xac, 0x82, 0x73, 0xe9, + 0xb4, 0xe5, 0xce, 0x78, 0x93, 0x17, 0x45, 0x21, 0x7d, 0xfd, 0x60, 0x0b, 0x44, 0x91, 0xdf, 0x05, + 0x25, 0x03, 0xab, 0x3b, 0xe4, 0xae, 0x49, 0x75, 0xe3, 0x16, 0x7a, 0xe4, 0x46, 0xa5, 0x77, 0xab, + 0x6f, 0xf2, 0x67, 0x57, 0xb2, 0x0c, 0xd7, 0xe0, 0x0d, 0x70, 0x6c, 0x8b, 0xcd, 0xcb, 0x75, 0x47, + 0x40, 0x66, 0x0f, 0x03, 0x37, 0xf2, 0x05, 0xd6, 0x70, 0x1e, 0xde, 0x4a, 0x58, 0x2e, 0xae, 0xf0, + 0x47, 0x52, 0xd9, 0xb7, 0x7d, 0xcd, 0xc6, 0xb5, 0x32, 0x7f, 0xcb, 0x7b, 0xa7, 0x11, 0x79, 0xef, + 0x0b, 0xd1, 0xf7, 0xbe, 0xb8, 0x06, 0x4e, 0x75, 0x84, 0x08, 0x5e, 0x40, 0x61, 0x9f, 0x0b, 0x71, + 0x9f, 0x2f, 0xff, 0x6a, 0x1e, 0x8c, 0x32, 0x20, 0xf8, 0x8b, 0x0c, 0x38, 0x9c, 0xc4, 0xf4, 0xc1, + 0x2b, 0xdd, 0xa7, 0x5b, 0x94, 0x83, 0xcc, 0xad, 0xf4, 0x81, 0xe0, 0x1a, 0x22, 0xbe, 0x2f, 0x7c, + 0xfb, 0xb3, 0xbf, 0xfd, 0x24, 0xf3, 0x1d, 0x61, 0xb3, 0x04, 0xaf, 0xec, 0xcd, 0x44, 0xfb, 0x46, + 0x73, 0x3a, 0xb1, 0xf8, 0x38, 0xe4, 0x86, 0x27, 0xf0, 0x52, 0x4f, 0x08, 0x3c, 0x35, 0x9e, 0xc0, + 0xcf, 0x04, 0xde, 0xf2, 0x45, 0x73, 0x17, 0x5e, 0xee, 0xde, 0xce, 0x08, 0xa3, 0x99, 0xbb, 0xd2, + 0x3b, 0x00, 0xf7, 0xd3, 0x05, 0xe6, 0xa6, 0xd7, 0xe1, 0x52, 0x17, 0x16, 0xba, 0x5c, 0x27, 0xfc, + 0x6e, 0x06, 0x64, 0xdb, 0x10, 0x98, 0x04, 0xde, 0xe8, 0x51, 0xb3, 0x44, 0xae, 0x34, 0x77, 0x73, + 0x40, 0x68, 0xdc, 0xe8, 0xeb, 0xcc, 0xe8, 0xee, 0x02, 0x83, 0x0b, 0x39, 0x80, 0xb2, 0x4f, 0x01, + 0x3e, 0xcd, 0x08, 0xf0, 0x47, 0x19, 0x9e, 0xf9, 0x9d, 0xd8, 0x50, 0xd8, 0x83, 0x05, 0x1d, 0x18, + 0xd8, 0xdc, 0xad, 0x41, 0xc1, 0x45, 0x3c, 0x72, 0x15, 0x96, 0xd3, 0x7b, 0x84, 0xc8, 0x74, 0x5b, + 0xa1, 0xb2, 0x62, 0x23, 0x59, 0x71, 0x20, 0x65, 0x8a, 0x5d, 0xf7, 0xc0, 0x6f, 0x66, 0xc0, 0xb1, + 0x64, 0x92, 0x96, 0xc0, 0xeb, 0x3d, 0x9f, 0x64, 0x2b, 0x1b, 0x9c, 0xbb, 0x31, 0x18, 0x30, 0xee, + 0x83, 0x2f, 0x33, 0x1f, 0xac, 0xc0, 0xcb, 0x3d, 0x44, 0x05, 0xb6, 0xa2, 0x41, 0xf1, 0xfd, 0x4c, + 0xec, 0xf9, 0x90, 0x40, 0xf8, 0xf6, 0x92, 0x23, 0xed, 0x29, 0xe6, 0xdc, 0xcd, 0x01, 0xa1, 0x45, + 0xbc, 0xb1, 0x0a, 0x4b, 0xfd, 0x46, 0x04, 0xb6, 0xe0, 0xbf, 0x3c, 0xda, 0x2d, 0x91, 0xe5, 0x84, + 0x6b, 0xe9, 0x35, 0xef, 0x44, 0xea, 0xe6, 0xae, 0xf5, 0x8d, 0xc3, 0x6d, 0x5f, 0x61, 0xb6, 0x7f, + 0x11, 0x5e, 0x48, 0xf1, 0x2f, 0x4c, 0x9f, 0xd1, 0x8e, 0x10, 0x0a, 0x09, 0x26, 0x87, 0x5f, 0xb1, + 0x3d, 0x99, 0x9c, 0xc0, 0xe3, 0xf6, 0x64, 0x72, 0x12, 0xc3, 0xda, 0x9b, 0xc9, 0x91, 0xee, 0x0e, + 0xfe, 0x5e, 0xe0, 0x74, 0x47, 0x84, 0x5c, 0x85, 0x6f, 0xa7, 0x57, 0x31, 0x89, 0xb3, 0xcd, 0x5d, + 0xee, 0x79, 0x3d, 0x37, 0xed, 0x2d, 0x66, 0xda, 0x32, 0x5c, 0xdc, 0xdb, 0x34, 0xca, 0x01, 0xdc, + 0x7f, 0x4d, 0xc2, 0x9f, 0x66, 0x78, 0xd7, 0xd4, 0x99, 0x2d, 0x85, 0xb7, 0xd3, 0xab, 0x98, 0x8a, + 0xa5, 0xcd, 0xad, 0x0f, 0x0e, 0xb0, 0xfb, 0x02, 0x6f, 0xfb, 0x88, 0x41, 0x4c, 0xdb, 0x0c, 0x53, + 0x76, 0xd9, 0x5f, 0xf8, 0x8f, 0x16, 0x76, 0x37, 0x4a, 0x35, 0x12, 0xd8, 0x45, 0x07, 0xd7, 0x86, + 0x42, 0xce, 0x95, 0xfa, 0x81, 0xe0, 0x56, 0x97, 0x98, 0xd5, 0x5f, 0x82, 0x17, 0xf7, 0xb6, 0xda, + 0x23, 0x8f, 0xe5, 0x78, 0x9b, 0xf3, 0x51, 0x86, 0xff, 0xef, 0x2e, 0x05, 0xc7, 0x0a, 0x37, 0xd2, + 0x2b, 0x9d, 0x9e, 0x26, 0xce, 0xdd, 0x1d, 0x30, 0x2a, 0xf7, 0x4e, 0x95, 0x79, 0x47, 0xd9, 0x5c, + 0x82, 0xc5, 0xbd, 0xfd, 0x13, 0x6d, 0x88, 0xcf, 0xa5, 0x59, 0xe0, 0xf7, 0xbf, 0xbf, 0x16, 0xc0, + 0x64, 0x88, 0xf2, 0x84, 0x6f, 0x76, 0x71, 0xb4, 0x61, 0xea, 0x34, 0xf7, 0x56, 0xf7, 0x0b, 0xb9, + 0xad, 0x8b, 0xcc, 0xd6, 0x05, 0x38, 0x9f, 0x22, 0x12, 0x5c, 0x25, 0xff, 0x9c, 0x89, 0x3d, 0x99, + 0x92, 0x79, 0xcd, 0x6e, 0x92, 0x3f, 0x15, 0x1f, 0xdb, 0x4d, 0xf2, 0xa7, 0xa3, 0x5c, 0xc5, 0x67, + 0xee, 0x63, 0xe8, 0x7b, 0xc2, 0x66, 0xaa, 0x02, 0x80, 0x1d, 0x20, 0x59, 0x37, 0xe5, 0x80, 0xf0, + 0x88, 0x1d, 0xff, 0x95, 0x5e, 0x41, 0xfc, 0x90, 0xf8, 0x4d, 0x26, 0xf6, 0x1b, 0x82, 0x4e, 0x74, + 0x06, 0xbc, 0xdb, 0xeb, 0x3b, 0xa7, 0x23, 0x23, 0x93, 0xbb, 0x37, 0x68, 0x58, 0xee, 0xef, 0x4d, + 0xe6, 0xee, 0x0d, 0x28, 0x75, 0xfd, 0xa8, 0x92, 0x2d, 0x64, 0x07, 0x1e, 0x2b, 0x3e, 0x8e, 0xf3, + 0x27, 0x4f, 0xe0, 0x0f, 0x87, 0xc1, 0x6b, 0x69, 0x58, 0x0f, 0xb8, 0xde, 0x47, 0x37, 0x94, 0x48, + 0xf7, 0xe4, 0xde, 0x1d, 0x20, 0x22, 0xf7, 0xd4, 0x47, 0x6e, 0x64, 0xfe, 0x4e, 0xd8, 0xbc, 0x0f, + 0xdf, 0xeb, 0xc6, 0x5b, 0x51, 0x4a, 0x38, 0x1a, 0x9e, 0x49, 0x6e, 0xfb, 0x6a, 0x5f, 0xe0, 0x5e, + 0xd8, 0x26, 0x21, 0xff, 0x36, 0xfe, 0xda, 0x09, 0xd5, 0x86, 0x72, 0x3f, 0xcc, 0xa3, 0xe7, 0xf6, + 0xd5, 0xfe, 0x40, 0x7a, 0xab, 0x01, 0xbe, 0x33, 0xfa, 0xa9, 0x01, 0xc9, 0x20, 0x7e, 0x0d, 0xf8, + 0xa7, 0xc0, 0xff, 0x57, 0x9f, 0xc4, 0x99, 0xc1, 0x2e, 0x58, 0xdb, 0x0e, 0xbc, 0x5c, 0x6e, 0xad, + 0x5f, 0x98, 0xee, 0x1b, 0xe4, 0x36, 0x14, 0x1f, 0xfc, 0xb7, 0x10, 0xfb, 0x01, 0x5a, 0x94, 0x84, + 0x83, 0xd7, 0xba, 0x3f, 0xe8, 0x44, 0x26, 0x30, 0xf7, 0x4e, 0xff, 0x40, 0xdd, 0x5b, 0x1d, 0x0a, + 0x8e, 0xe2, 0x63, 0x9f, 0x88, 0x7c, 0x52, 0xfa, 0xca, 0xc7, 0x2f, 0x66, 0x85, 0x4f, 0x5e, 0xcc, + 0x0a, 0x7f, 0x7d, 0x31, 0x2b, 0x3c, 0x7b, 0x39, 0x3b, 0xf4, 0xc9, 0xcb, 0xd9, 0xa1, 0x3f, 0xbe, + 0x9c, 0x1d, 0xda, 0xbc, 0x54, 0xd5, 0xe9, 0x76, 0x7d, 0xab, 0xa0, 0xe2, 0x1a, 0xff, 0x21, 0x63, + 0x68, 0x97, 0xf3, 0xfe, 0x2e, 0x8d, 0x37, 0x8a, 0x8f, 0x62, 0x6d, 0x7a, 0xd3, 0x42, 0x64, 0x6b, + 0x8c, 0xfd, 0x5c, 0xe2, 0xf5, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x38, 0x2b, 0x5b, 0xb8, 0x68, + 0x2a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2184,10 +2372,14 @@ type QueryClient interface { // ConsumerChains queries active consumer chains supported by the provider // chain QueryConsumerChains(ctx context.Context, in *QueryConsumerChainsRequest, opts ...grpc.CallOption) (*QueryConsumerChainsResponse, error) + // [DEPRECATED]: Use `QueryConsumersThatAreAboutToStart` instead // QueryConsumerChainStarts queries consumer chain start proposals. QueryConsumerChainStarts(ctx context.Context, in *QueryConsumerChainStartProposalsRequest, opts ...grpc.CallOption) (*QueryConsumerChainStartProposalsResponse, error) + QueryConsumersThatAreAboutToStart(ctx context.Context, in *QueryConsumersThatAreAboutToStartRequest, opts ...grpc.CallOption) (*QueryConsumersThatAreAboutToStartResponse, error) + // [DEPRECATED]: Use `QueryConsumersThatAreAboutToStop` instead // QueryConsumerChainStops queries consumer chain stop proposals. QueryConsumerChainStops(ctx context.Context, in *QueryConsumerChainStopProposalsRequest, opts ...grpc.CallOption) (*QueryConsumerChainStopProposalsResponse, error) + QueryConsumersThatAreAboutToStop(ctx context.Context, in *QueryConsumersThatAreAboutToStopRequest, opts ...grpc.CallOption) (*QueryConsumersThatAreAboutToStopResponse, error) // QueryValidatorConsumerAddr queries the address // assigned by a validator for a consumer chain. QueryValidatorConsumerAddr(ctx context.Context, in *QueryValidatorConsumerAddrRequest, opts ...grpc.CallOption) (*QueryValidatorConsumerAddrResponse, error) @@ -2255,6 +2447,7 @@ func (c *queryClient) QueryConsumerChains(ctx context.Context, in *QueryConsumer return out, nil } +// Deprecated: Do not use. func (c *queryClient) QueryConsumerChainStarts(ctx context.Context, in *QueryConsumerChainStartProposalsRequest, opts ...grpc.CallOption) (*QueryConsumerChainStartProposalsResponse, error) { out := new(QueryConsumerChainStartProposalsResponse) err := c.cc.Invoke(ctx, "/interchain_security.ccv.provider.v1.Query/QueryConsumerChainStarts", in, out, opts...) @@ -2264,6 +2457,16 @@ func (c *queryClient) QueryConsumerChainStarts(ctx context.Context, in *QueryCon return out, nil } +func (c *queryClient) QueryConsumersThatAreAboutToStart(ctx context.Context, in *QueryConsumersThatAreAboutToStartRequest, opts ...grpc.CallOption) (*QueryConsumersThatAreAboutToStartResponse, error) { + out := new(QueryConsumersThatAreAboutToStartResponse) + err := c.cc.Invoke(ctx, "/interchain_security.ccv.provider.v1.Query/QueryConsumersThatAreAboutToStart", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Deprecated: Do not use. func (c *queryClient) QueryConsumerChainStops(ctx context.Context, in *QueryConsumerChainStopProposalsRequest, opts ...grpc.CallOption) (*QueryConsumerChainStopProposalsResponse, error) { out := new(QueryConsumerChainStopProposalsResponse) err := c.cc.Invoke(ctx, "/interchain_security.ccv.provider.v1.Query/QueryConsumerChainStops", in, out, opts...) @@ -2273,6 +2476,15 @@ func (c *queryClient) QueryConsumerChainStops(ctx context.Context, in *QueryCons return out, nil } +func (c *queryClient) QueryConsumersThatAreAboutToStop(ctx context.Context, in *QueryConsumersThatAreAboutToStopRequest, opts ...grpc.CallOption) (*QueryConsumersThatAreAboutToStopResponse, error) { + out := new(QueryConsumersThatAreAboutToStopResponse) + err := c.cc.Invoke(ctx, "/interchain_security.ccv.provider.v1.Query/QueryConsumersThatAreAboutToStop", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *queryClient) QueryValidatorConsumerAddr(ctx context.Context, in *QueryValidatorConsumerAddrRequest, opts ...grpc.CallOption) (*QueryValidatorConsumerAddrResponse, error) { out := new(QueryValidatorConsumerAddrResponse) err := c.cc.Invoke(ctx, "/interchain_security.ccv.provider.v1.Query/QueryValidatorConsumerAddr", in, out, opts...) @@ -2398,10 +2610,14 @@ type QueryServer interface { // ConsumerChains queries active consumer chains supported by the provider // chain QueryConsumerChains(context.Context, *QueryConsumerChainsRequest) (*QueryConsumerChainsResponse, error) + // [DEPRECATED]: Use `QueryConsumersThatAreAboutToStart` instead // QueryConsumerChainStarts queries consumer chain start proposals. QueryConsumerChainStarts(context.Context, *QueryConsumerChainStartProposalsRequest) (*QueryConsumerChainStartProposalsResponse, error) + QueryConsumersThatAreAboutToStart(context.Context, *QueryConsumersThatAreAboutToStartRequest) (*QueryConsumersThatAreAboutToStartResponse, error) + // [DEPRECATED]: Use `QueryConsumersThatAreAboutToStop` instead // QueryConsumerChainStops queries consumer chain stop proposals. QueryConsumerChainStops(context.Context, *QueryConsumerChainStopProposalsRequest) (*QueryConsumerChainStopProposalsResponse, error) + QueryConsumersThatAreAboutToStop(context.Context, *QueryConsumersThatAreAboutToStopRequest) (*QueryConsumersThatAreAboutToStopResponse, error) // QueryValidatorConsumerAddr queries the address // assigned by a validator for a consumer chain. QueryValidatorConsumerAddr(context.Context, *QueryValidatorConsumerAddrRequest) (*QueryValidatorConsumerAddrResponse, error) @@ -2456,9 +2672,15 @@ func (*UnimplementedQueryServer) QueryConsumerChains(ctx context.Context, req *Q func (*UnimplementedQueryServer) QueryConsumerChainStarts(ctx context.Context, req *QueryConsumerChainStartProposalsRequest) (*QueryConsumerChainStartProposalsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method QueryConsumerChainStarts not implemented") } +func (*UnimplementedQueryServer) QueryConsumersThatAreAboutToStart(ctx context.Context, req *QueryConsumersThatAreAboutToStartRequest) (*QueryConsumersThatAreAboutToStartResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method QueryConsumersThatAreAboutToStart not implemented") +} func (*UnimplementedQueryServer) QueryConsumerChainStops(ctx context.Context, req *QueryConsumerChainStopProposalsRequest) (*QueryConsumerChainStopProposalsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method QueryConsumerChainStops not implemented") } +func (*UnimplementedQueryServer) QueryConsumersThatAreAboutToStop(ctx context.Context, req *QueryConsumersThatAreAboutToStopRequest) (*QueryConsumersThatAreAboutToStopResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method QueryConsumersThatAreAboutToStop not implemented") +} func (*UnimplementedQueryServer) QueryValidatorConsumerAddr(ctx context.Context, req *QueryValidatorConsumerAddrRequest) (*QueryValidatorConsumerAddrResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method QueryValidatorConsumerAddr not implemented") } @@ -2557,6 +2779,24 @@ func _Query_QueryConsumerChainStarts_Handler(srv interface{}, ctx context.Contex return interceptor(ctx, in, info, handler) } +func _Query_QueryConsumersThatAreAboutToStart_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryConsumersThatAreAboutToStartRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).QueryConsumersThatAreAboutToStart(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/interchain_security.ccv.provider.v1.Query/QueryConsumersThatAreAboutToStart", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).QueryConsumersThatAreAboutToStart(ctx, req.(*QueryConsumersThatAreAboutToStartRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Query_QueryConsumerChainStops_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryConsumerChainStopProposalsRequest) if err := dec(in); err != nil { @@ -2575,6 +2815,24 @@ func _Query_QueryConsumerChainStops_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } +func _Query_QueryConsumersThatAreAboutToStop_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryConsumersThatAreAboutToStopRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).QueryConsumersThatAreAboutToStop(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/interchain_security.ccv.provider.v1.Query/QueryConsumersThatAreAboutToStop", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).QueryConsumersThatAreAboutToStop(ctx, req.(*QueryConsumersThatAreAboutToStopRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Query_QueryValidatorConsumerAddr_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryValidatorConsumerAddrRequest) if err := dec(in); err != nil { @@ -2825,10 +3083,18 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "QueryConsumerChainStarts", Handler: _Query_QueryConsumerChainStarts_Handler, }, + { + MethodName: "QueryConsumersThatAreAboutToStart", + Handler: _Query_QueryConsumersThatAreAboutToStart_Handler, + }, { MethodName: "QueryConsumerChainStops", Handler: _Query_QueryConsumerChainStops_Handler, }, + { + MethodName: "QueryConsumersThatAreAboutToStop", + Handler: _Query_QueryConsumersThatAreAboutToStop_Handler, + }, { MethodName: "QueryValidatorConsumerAddr", Handler: _Query_QueryValidatorConsumerAddr_Handler, @@ -3074,7 +3340,7 @@ func (m *QueryConsumerChainStartProposalsResponse) MarshalToSizedBuffer(dAtA []b return len(dAtA) - i, nil } -func (m *QueryConsumerChainStopProposalsRequest) Marshal() (dAtA []byte, err error) { +func (m *QueryConsumersThatAreAboutToStartRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3084,12 +3350,12 @@ func (m *QueryConsumerChainStopProposalsRequest) Marshal() (dAtA []byte, err err return dAtA[:n], nil } -func (m *QueryConsumerChainStopProposalsRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryConsumersThatAreAboutToStartRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryConsumerChainStopProposalsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryConsumersThatAreAboutToStartRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3097,7 +3363,7 @@ func (m *QueryConsumerChainStopProposalsRequest) MarshalToSizedBuffer(dAtA []byt return len(dAtA) - i, nil } -func (m *QueryConsumerChainStopProposalsResponse) Marshal() (dAtA []byte, err error) { +func (m *QueryConsumersThatAreAboutToStartResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3107,32 +3373,29 @@ func (m *QueryConsumerChainStopProposalsResponse) Marshal() (dAtA []byte, err er return dAtA[:n], nil } -func (m *QueryConsumerChainStopProposalsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryConsumersThatAreAboutToStartResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryConsumerChainStopProposalsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryConsumersThatAreAboutToStartResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.Proposals != nil { - { - size, err := m.Proposals.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintQuery(dAtA, i, uint64(size)) + if len(m.ConsumerIds) > 0 { + for iNdEx := len(m.ConsumerIds) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ConsumerIds[iNdEx]) + copy(dAtA[i:], m.ConsumerIds[iNdEx]) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ConsumerIds[iNdEx]))) + i-- + dAtA[i] = 0xa } - i-- - dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *Chain) Marshal() (dAtA []byte, err error) { +func (m *QueryConsumerChainStopProposalsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3142,28 +3405,141 @@ func (m *Chain) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *Chain) MarshalTo(dAtA []byte) (int, error) { +func (m *QueryConsumerChainStopProposalsRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *Chain) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QueryConsumerChainStopProposalsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Denylist) > 0 { - for iNdEx := len(m.Denylist) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Denylist[iNdEx]) - copy(dAtA[i:], m.Denylist[iNdEx]) - i = encodeVarintQuery(dAtA, i, uint64(len(m.Denylist[iNdEx]))) - i-- - dAtA[i] = 0x42 - } + return len(dAtA) - i, nil +} + +func (m *QueryConsumerChainStopProposalsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - if len(m.Allowlist) > 0 { - for iNdEx := len(m.Allowlist) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Allowlist[iNdEx]) + return dAtA[:n], nil +} + +func (m *QueryConsumerChainStopProposalsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryConsumerChainStopProposalsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Proposals != nil { + { + size, err := m.Proposals.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryConsumersThatAreAboutToStopRequest) 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 *QueryConsumersThatAreAboutToStopRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryConsumersThatAreAboutToStopRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryConsumersThatAreAboutToStopResponse) 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 *QueryConsumersThatAreAboutToStopResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryConsumersThatAreAboutToStopResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ConsumerIds) > 0 { + for iNdEx := len(m.ConsumerIds) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ConsumerIds[iNdEx]) + copy(dAtA[i:], m.ConsumerIds[iNdEx]) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ConsumerIds[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *Chain) 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 *Chain) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Chain) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Denylist) > 0 { + for iNdEx := len(m.Denylist) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Denylist[iNdEx]) + copy(dAtA[i:], m.Denylist[iNdEx]) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Denylist[iNdEx]))) + i-- + dAtA[i] = 0x42 + } + } + if len(m.Allowlist) > 0 { + for iNdEx := len(m.Allowlist) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Allowlist[iNdEx]) copy(dAtA[i:], m.Allowlist[iNdEx]) i = encodeVarintQuery(dAtA, i, uint64(len(m.Allowlist[iNdEx]))) i-- @@ -4372,6 +4748,30 @@ func (m *QueryConsumerChainStartProposalsResponse) Size() (n int) { return n } +func (m *QueryConsumersThatAreAboutToStartRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryConsumersThatAreAboutToStartResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.ConsumerIds) > 0 { + for _, s := range m.ConsumerIds { + l = len(s) + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + func (m *QueryConsumerChainStopProposalsRequest) Size() (n int) { if m == nil { return 0 @@ -4394,6 +4794,30 @@ func (m *QueryConsumerChainStopProposalsResponse) Size() (n int) { return n } +func (m *QueryConsumersThatAreAboutToStopRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryConsumersThatAreAboutToStopResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.ConsumerIds) > 0 { + for _, s := range m.ConsumerIds { + l = len(s) + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + func (m *Chain) Size() (n int) { if m == nil { return 0 @@ -5363,6 +5787,138 @@ func (m *QueryConsumerChainStartProposalsResponse) Unmarshal(dAtA []byte) error } return nil } +func (m *QueryConsumersThatAreAboutToStartRequest) 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 ErrIntOverflowQuery + } + 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: QueryConsumersThatAreAboutToStartRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryConsumersThatAreAboutToStartRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryConsumersThatAreAboutToStartResponse) 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 ErrIntOverflowQuery + } + 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: QueryConsumersThatAreAboutToStartResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryConsumersThatAreAboutToStartResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConsumerIds", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConsumerIds = append(m.ConsumerIds, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *QueryConsumerChainStopProposalsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -5499,6 +6055,138 @@ func (m *QueryConsumerChainStopProposalsResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *QueryConsumersThatAreAboutToStopRequest) 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 ErrIntOverflowQuery + } + 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: QueryConsumersThatAreAboutToStopRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryConsumersThatAreAboutToStopRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryConsumersThatAreAboutToStopResponse) 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 ErrIntOverflowQuery + } + 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: QueryConsumersThatAreAboutToStopResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryConsumersThatAreAboutToStopResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConsumerIds", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConsumerIds = append(m.ConsumerIds, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Chain) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/ccv/provider/types/query.pb.gw.go b/x/ccv/provider/types/query.pb.gw.go index a533712da9..caa72546af 100644 --- a/x/ccv/provider/types/query.pb.gw.go +++ b/x/ccv/provider/types/query.pb.gw.go @@ -213,6 +213,24 @@ func local_request_Query_QueryConsumerChainStarts_0(ctx context.Context, marshal } +func request_Query_QueryConsumersThatAreAboutToStart_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryConsumersThatAreAboutToStartRequest + var metadata runtime.ServerMetadata + + msg, err := client.QueryConsumersThatAreAboutToStart(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_QueryConsumersThatAreAboutToStart_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryConsumersThatAreAboutToStartRequest + var metadata runtime.ServerMetadata + + msg, err := server.QueryConsumersThatAreAboutToStart(ctx, &protoReq) + return msg, metadata, err + +} + func request_Query_QueryConsumerChainStops_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryConsumerChainStopProposalsRequest var metadata runtime.ServerMetadata @@ -231,6 +249,24 @@ func local_request_Query_QueryConsumerChainStops_0(ctx context.Context, marshale } +func request_Query_QueryConsumersThatAreAboutToStop_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryConsumersThatAreAboutToStopRequest + var metadata runtime.ServerMetadata + + msg, err := client.QueryConsumersThatAreAboutToStop(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_QueryConsumersThatAreAboutToStop_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryConsumersThatAreAboutToStopRequest + var metadata runtime.ServerMetadata + + msg, err := server.QueryConsumersThatAreAboutToStop(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_Query_QueryValidatorConsumerAddr_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) @@ -1219,6 +1255,29 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_QueryConsumersThatAreAboutToStart_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_QueryConsumersThatAreAboutToStart_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_QueryConsumersThatAreAboutToStart_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_QueryConsumerChainStops_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1242,6 +1301,29 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_QueryConsumersThatAreAboutToStop_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_QueryConsumersThatAreAboutToStop_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_QueryConsumersThatAreAboutToStop_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_QueryValidatorConsumerAddr_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1754,6 +1836,26 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_QueryConsumersThatAreAboutToStart_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_QueryConsumersThatAreAboutToStart_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_QueryConsumersThatAreAboutToStart_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_QueryConsumerChainStops_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1774,6 +1876,26 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_QueryConsumersThatAreAboutToStop_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_QueryConsumersThatAreAboutToStop_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_QueryConsumersThatAreAboutToStop_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_QueryValidatorConsumerAddr_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2126,8 +2248,12 @@ var ( pattern_Query_QueryConsumerChainStarts_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"interchain_security", "ccv", "provider", "consumer_chain_start_proposals"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_QueryConsumersThatAreAboutToStart_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"interchain_security", "ccv", "provider", "consumers_that_are_about_to_start"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_QueryConsumerChainStops_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"interchain_security", "ccv", "provider", "consumer_chain_stop_proposals"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_QueryConsumersThatAreAboutToStop_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"interchain_security", "ccv", "provider", "consumers_that_are_about_to_stop"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_QueryValidatorConsumerAddr_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"interchain_security", "ccv", "provider", "validator_consumer_addr"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_QueryValidatorProviderAddr_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"interchain_security", "ccv", "provider", "validator_provider_addr"}, "", runtime.AssumeColonVerbOpt(false))) @@ -2172,8 +2298,12 @@ var ( forward_Query_QueryConsumerChainStarts_0 = runtime.ForwardResponseMessage + forward_Query_QueryConsumersThatAreAboutToStart_0 = runtime.ForwardResponseMessage + forward_Query_QueryConsumerChainStops_0 = runtime.ForwardResponseMessage + forward_Query_QueryConsumersThatAreAboutToStop_0 = runtime.ForwardResponseMessage + forward_Query_QueryValidatorConsumerAddr_0 = runtime.ForwardResponseMessage forward_Query_QueryValidatorProviderAddr_0 = runtime.ForwardResponseMessage