diff --git a/changelog.md b/changelog.md index e3fe346ead..3869eee5bf 100644 --- a/changelog.md +++ b/changelog.md @@ -5,6 +5,7 @@ ### Features * [3461](https://github.com/zeta-chain/node/pull/3461) - add new 'ConfirmationParams' field to chain params to enable multiple confirmation count values, deprecating `confirmation_count` +* [3469](https://github.com/zeta-chain/node/pull/3469) - add `MsgRemoveInboundTracker` to remove inbound trackers. This message can be triggered by the emergency policy. ### Tests diff --git a/docs/cli/zetacored/cli.md b/docs/cli/zetacored/cli.md index 99eb20a30e..5148069bf6 100644 --- a/docs/cli/zetacored/cli.md +++ b/docs/cli/zetacored/cli.md @@ -10501,6 +10501,7 @@ zetacored tx crosschain [flags] * [zetacored tx crosschain add-outbound-tracker](#zetacored-tx-crosschain-add-outbound-tracker) - Add an outbound tracker * [zetacored tx crosschain migrate-tss-funds](#zetacored-tx-crosschain-migrate-tss-funds) - Migrate TSS funds to the latest TSS address * [zetacored tx crosschain refund-aborted](#zetacored-tx-crosschain-refund-aborted) - Refund an aborted tx , the refund address is optional, if not provided, the refund will be sent to the sender/tx origin of the cctx. +* [zetacored tx crosschain remove-inbound-tracker](#zetacored-tx-crosschain-remove-inbound-tracker) - Remove an inbound tracker * [zetacored tx crosschain remove-outbound-tracker](#zetacored-tx-crosschain-remove-outbound-tracker) - Remove an outbound tracker * [zetacored tx crosschain update-tss-address](#zetacored-tx-crosschain-update-tss-address) - Create a new TSSVoter * [zetacored tx crosschain vote-gas-price](#zetacored-tx-crosschain-vote-gas-price) - Broadcast message to vote gas price @@ -10774,6 +10775,59 @@ zetacored tx crosschain refund-aborted [cctx-index] [refund-address] [flags] * [zetacored tx crosschain](#zetacored-tx-crosschain) - crosschain transactions subcommands +## zetacored tx crosschain remove-inbound-tracker + +Remove an inbound tracker + +``` +zetacored tx crosschain remove-inbound-tracker [chain-id] [tx-hash] [flags] +``` + +### Options + +``` + -a, --account-number uint The account number of the signing account (offline mode only) + --aux Generate aux signer data instead of sending a tx + -b, --broadcast-mode string Transaction broadcasting mode (sync|async) + --chain-id string The network chain ID + --dry-run ignore the --gas flag and perform a simulation of a transaction, but don't broadcast it (when enabled, the local Keybase is not accessible) + --fee-granter string Fee granter grants fees for the transaction + --fee-payer string Fee payer pays fees for the transaction instead of deducting from the signer + --fees string Fees to pay along with transaction; eg: 10uatom + --from string Name or address of private key with which to sign + --gas string gas limit to set per-transaction; set to "auto" to calculate sufficient gas automatically. Note: "auto" option doesn't always report accurate results. Set a valid coin value to adjust the result. Can be used instead of "fees". (default 200000) + --gas-adjustment float adjustment factor to be multiplied against the estimate returned by the tx simulation; if the gas limit is set manually this flag is ignored (default 1) + --gas-prices string Gas prices in decimal format to determine the transaction fee (e.g. 0.1uatom) + --generate-only Build an unsigned transaction and write it to STDOUT (when enabled, the local Keybase only accessed when providing a key name) + -h, --help help for remove-inbound-tracker + --keyring-backend string Select keyring's backend (os|file|kwallet|pass|test|memory) + --keyring-dir string The client Keyring directory; if omitted, the default 'home' directory will be used + --ledger Use a connected Ledger device + --node string [host]:[port] to CometBFT rpc interface for this chain + --note string Note to add a description to the transaction (previously --memo) + --offline Offline mode (does not allow any online functionality) + -o, --output string Output format (text|json) + -s, --sequence uint The sequence number of the signing account (offline mode only) + --sign-mode string Choose sign mode (direct|amino-json|direct-aux|textual), this is an advanced feature + --timeout-height uint Set a block timeout height to prevent the tx from being committed past a certain height + --tip string Tip is the amount that is going to be transferred to the fee payer on the target chain. This flag is only valid when used with --aux, and is ignored if the target chain didn't enable the TipDecorator + -y, --yes Skip tx broadcasting prompt confirmation +``` + +### Options inherited from parent commands + +``` + --home string directory for config and data + --log_format string The logging format (json|plain) + --log_level string The logging level (trace|debug|info|warn|error|fatal|panic|disabled or '*:[level],[key]:[level]') + --log_no_color Disable colored logs + --trace print out full stack trace on errors +``` + +### SEE ALSO + +* [zetacored tx crosschain](#zetacored-tx-crosschain) - crosschain transactions subcommands + ## zetacored tx crosschain remove-outbound-tracker Remove an outbound tracker diff --git a/docs/openapi/openapi.swagger.yaml b/docs/openapi/openapi.swagger.yaml index 3ad546151f..f410a97328 100644 --- a/docs/openapi/openapi.swagger.yaml +++ b/docs/openapi/openapi.swagger.yaml @@ -59095,6 +59095,8 @@ definitions: type: object crosschainMsgRefundAbortedCCTXResponse: type: object + crosschainMsgRemoveInboundTrackerResponse: + type: object crosschainMsgRemoveOutboundTrackerResponse: type: object crosschainMsgUpdateERC20CustodyPauseStatusResponse: diff --git a/docs/spec/crosschain/messages.md b/docs/spec/crosschain/messages.md index 5c34e18d57..fb0c3a07b0 100644 --- a/docs/spec/crosschain/messages.md +++ b/docs/spec/crosschain/messages.md @@ -34,6 +34,18 @@ message MsgAddInboundTracker { } ``` +## MsgRemoveInboundTracker + +RemoveInboundTracker removes the inbound tracker if it exists. + +```proto +message MsgRemoveInboundTracker { + string creator = 1; + int64 chain_id = 2; + string tx_hash = 3; +} +``` + ## MsgRemoveOutboundTracker RemoveOutboundTracker removes a record from the outbound transaction tracker by chain ID and nonce. diff --git a/proto/zetachain/zetacore/crosschain/tx.proto b/proto/zetachain/zetacore/crosschain/tx.proto index 0297a8f6a0..3dd1db1c3f 100644 --- a/proto/zetachain/zetacore/crosschain/tx.proto +++ b/proto/zetachain/zetacore/crosschain/tx.proto @@ -18,6 +18,8 @@ service Msg { returns (MsgAddOutboundTrackerResponse); rpc AddInboundTracker(MsgAddInboundTracker) returns (MsgAddInboundTrackerResponse); + rpc RemoveInboundTracker(MsgRemoveInboundTracker) + returns (MsgRemoveInboundTrackerResponse); rpc RemoveOutboundTracker(MsgRemoveOutboundTracker) returns (MsgRemoveOutboundTrackerResponse); @@ -64,6 +66,9 @@ message MsgUpdateTssAddress { message MsgUpdateTssAddressResponse {} +// MsgAddInboundTracker defines a message to add an inbound tracker. +// The index used for the saving the tracker to the store is of the format +// - message MsgAddInboundTracker { option (cosmos.msg.v1.signer) = "creator"; string creator = 1; @@ -77,6 +82,18 @@ message MsgAddInboundTracker { } message MsgAddInboundTrackerResponse {} +// MsgRemoveInboundTracker defines a message to remove an inbound tracker. +// The index used for the fetching the tracker to the store is of the format +// - +message MsgRemoveInboundTracker { + option (cosmos.msg.v1.signer) = "creator"; + string creator = 1; + int64 chain_id = 2; + string tx_hash = 3; +} + +message MsgRemoveInboundTrackerResponse {} + // TODO: https://github.com/zeta-chain/node/issues/3083 message MsgWhitelistERC20 { option (cosmos.msg.v1.signer) = "creator"; diff --git a/typescript/zetachain/zetacore/crosschain/tx_pb.d.ts b/typescript/zetachain/zetacore/crosschain/tx_pb.d.ts index 8685811c0f..c7fbb7d609 100644 --- a/typescript/zetachain/zetacore/crosschain/tx_pb.d.ts +++ b/typescript/zetachain/zetacore/crosschain/tx_pb.d.ts @@ -113,6 +113,10 @@ export declare class MsgUpdateTssAddressResponse extends Message- + * * @generated from message zetachain.zetacore.crosschain.MsgAddInboundTracker */ export declare class MsgAddInboundTracker extends Message { @@ -188,6 +192,63 @@ export declare class MsgAddInboundTrackerResponse extends Message | undefined, b: MsgAddInboundTrackerResponse | PlainMessage | undefined): boolean; } +/** + * MsgRemoveInboundTracker defines a message to remove an inbound tracker. + * The index used for the fetching the tracker to the store is of the format + * - + * + * @generated from message zetachain.zetacore.crosschain.MsgRemoveInboundTracker + */ +export declare class MsgRemoveInboundTracker extends Message { + /** + * @generated from field: string creator = 1; + */ + creator: string; + + /** + * @generated from field: int64 chain_id = 2; + */ + chainId: bigint; + + /** + * @generated from field: string tx_hash = 3; + */ + txHash: string; + + constructor(data?: PartialMessage); + + static readonly runtime: typeof proto3; + static readonly typeName = "zetachain.zetacore.crosschain.MsgRemoveInboundTracker"; + static readonly fields: FieldList; + + static fromBinary(bytes: Uint8Array, options?: Partial): MsgRemoveInboundTracker; + + static fromJson(jsonValue: JsonValue, options?: Partial): MsgRemoveInboundTracker; + + static fromJsonString(jsonString: string, options?: Partial): MsgRemoveInboundTracker; + + static equals(a: MsgRemoveInboundTracker | PlainMessage | undefined, b: MsgRemoveInboundTracker | PlainMessage | undefined): boolean; +} + +/** + * @generated from message zetachain.zetacore.crosschain.MsgRemoveInboundTrackerResponse + */ +export declare class MsgRemoveInboundTrackerResponse extends Message { + constructor(data?: PartialMessage); + + static readonly runtime: typeof proto3; + static readonly typeName = "zetachain.zetacore.crosschain.MsgRemoveInboundTrackerResponse"; + static readonly fields: FieldList; + + static fromBinary(bytes: Uint8Array, options?: Partial): MsgRemoveInboundTrackerResponse; + + static fromJson(jsonValue: JsonValue, options?: Partial): MsgRemoveInboundTrackerResponse; + + static fromJsonString(jsonString: string, options?: Partial): MsgRemoveInboundTrackerResponse; + + static equals(a: MsgRemoveInboundTrackerResponse | PlainMessage | undefined, b: MsgRemoveInboundTrackerResponse | PlainMessage | undefined): boolean; +} + /** * TODO: https://github.com/zeta-chain/node/issues/3083 * diff --git a/x/authority/keeper/migrator.go b/x/authority/keeper/migrator.go index e94adebb6d..630c8c0039 100644 --- a/x/authority/keeper/migrator.go +++ b/x/authority/keeper/migrator.go @@ -4,6 +4,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" v2 "github.com/zeta-chain/node/x/authority/migrations/v2" + v3 "github.com/zeta-chain/node/x/authority/migrations/v3" ) // Migrator is a struct for handling in-place store migrations. @@ -22,3 +23,8 @@ func NewMigrator(keeper Keeper) Migrator { func (m Migrator) Migrate1to2(ctx sdk.Context) error { return v2.MigrateStore(ctx, m.authorityKeeper) } + +// Migrate2to3 migrates the authority store from consensus version 2 to 3 +func (m Migrator) Migrate2to3(ctx sdk.Context) error { + return v3.MigrateStore(ctx, m.authorityKeeper) +} diff --git a/x/authority/migrations/v3/migrate.go b/x/authority/migrations/v3/migrate.go new file mode 100644 index 0000000000..90c514b65f --- /dev/null +++ b/x/authority/migrations/v3/migrate.go @@ -0,0 +1,46 @@ +package v3 + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/zeta-chain/node/x/authority/types" +) + +type authorityKeeper interface { + SetAuthorizationList(ctx sdk.Context, list types.AuthorizationList) + GetAuthorizationList(ctx sdk.Context) (val types.AuthorizationList, found bool) +} + +// MigrateStore migrates the authority module state from the consensus version 2 to 3 +func MigrateStore( + ctx sdk.Context, + keeper authorityKeeper, +) error { + // + var ( + authorizationList = types.DefaultAuthorizationsList() + removeInboundAuthorization = types.Authorization{ + MsgUrl: "/zetachain.zetacore.crosschain.MsgRemoveInboundTracker", + AuthorizedPolicy: types.PolicyType_groupEmergency, + } + ) + + // Fetch the current authorization list, if found use that instead of default list + al, found := keeper.GetAuthorizationList(ctx) + if found { + authorizationList = al + } + + // Add the new authorization + authorizationList.SetAuthorization(removeInboundAuthorization) + + // Validate the authorization list + err := authorizationList.Validate() + if err != nil { + return err + } + + // Set the new authorization list + keeper.SetAuthorizationList(ctx, authorizationList) + return nil +} diff --git a/x/authority/migrations/v3/migrate_test.go b/x/authority/migrations/v3/migrate_test.go new file mode 100644 index 0000000000..f8071b01e1 --- /dev/null +++ b/x/authority/migrations/v3/migrate_test.go @@ -0,0 +1,67 @@ +package v3_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + keepertest "github.com/zeta-chain/node/testutil/keeper" + v3 "github.com/zeta-chain/node/x/authority/migrations/v3" + "github.com/zeta-chain/node/x/authority/types" +) + +func TestMigrateStore(t *testing.T) { + t.Run("update authorization list", func(t *testing.T) { + // Arrange + k, ctx := keepertest.AuthorityKeeper(t) + + list := types.DefaultAuthorizationsList() + list.RemoveAuthorization("/zetachain.zetacore.crosschain.MsgRemoveInboundTracker") + k.SetAuthorizationList(ctx, list) + + // Act + err := v3.MigrateStore(ctx, *k) + + // Assert + require.NoError(t, err) + list, found := k.GetAuthorizationList(ctx) + require.True(t, found) + require.Equal(t, types.DefaultAuthorizationsList(), list) + }) + + t.Run("set default authorization list if list is not found", func(t *testing.T) { + // Arrange + k, ctx := keepertest.AuthorityKeeper(t) + + // Act + err := v3.MigrateStore(ctx, *k) + + // Assert + require.NoError(t, err) + list, found := k.GetAuthorizationList(ctx) + require.True(t, found) + require.Equal(t, types.DefaultAuthorizationsList(), list) + }) + + t.Run("return error list is invalid", func(t *testing.T) { + // Arrange + k, ctx := keepertest.AuthorityKeeper(t) + + k.SetAuthorizationList(ctx, types.AuthorizationList{Authorizations: []types.Authorization{ + { + MsgUrl: "ABC", + AuthorizedPolicy: types.PolicyType_groupEmergency, + }, + { + MsgUrl: "ABC", + AuthorizedPolicy: types.PolicyType_groupEmergency, + }, + }}) + + // Act + err := v3.MigrateStore(ctx, *k) + + // Assert + require.Error(t, err) + }) +} diff --git a/x/authority/module.go b/x/authority/module.go index c01a64c7cd..377e1e0826 100644 --- a/x/authority/module.go +++ b/x/authority/module.go @@ -20,6 +20,8 @@ import ( "github.com/zeta-chain/node/x/authority/types" ) +const ConsensusVersion = 3 + var ( _ module.AppModule = AppModule{} _ module.AppModuleBasic = AppModuleBasic{} @@ -126,6 +128,9 @@ func (am AppModule) RegisterServices(cfg module.Configurator) { if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { panic(err) } + if err := cfg.RegisterMigration(types.ModuleName, 2, m.Migrate2to3); err != nil { + panic(err) + } } // RegisterInvariants registers the authority module's invariants. @@ -150,7 +155,7 @@ func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.Raw } // ConsensusVersion implements AppModule/ConsensusVersion. -func (AppModule) ConsensusVersion() uint64 { return 2 } +func (AppModule) ConsensusVersion() uint64 { return ConsensusVersion } // BeginBlock executes all ABCI BeginBlock logic respective to the authority module. func (am AppModule) BeginBlock(_ context.Context) error { diff --git a/x/authority/types/authorization_list.go b/x/authority/types/authorization_list.go index 6fe46f08fa..1735d44276 100644 --- a/x/authority/types/authorization_list.go +++ b/x/authority/types/authorization_list.go @@ -48,6 +48,7 @@ var ( "/zetachain.zetacore.crosschain.MsgAddInboundTracker", "/zetachain.zetacore.crosschain.MsgAddOutboundTracker", "/zetachain.zetacore.crosschain.MsgRemoveOutboundTracker", + "/zetachain.zetacore.crosschain.MsgRemoveInboundTracker", "/zetachain.zetacore.fungible.MsgPauseZRC20", "/zetachain.zetacore.observer.MsgUpdateKeygen", "/zetachain.zetacore.observer.MsgDisableCCTX", diff --git a/x/authority/types/authorization_list_test.go b/x/authority/types/authorization_list_test.go index dafa70ca27..7703bc4635 100644 --- a/x/authority/types/authorization_list_test.go +++ b/x/authority/types/authorization_list_test.go @@ -405,6 +405,7 @@ func TestDefaultAuthorizationsList(t *testing.T) { // EmergencyPolicyMessageList is a list of messages that can be authorized by the emergency policy var EmergencyPolicyMessageList = []string{ sdk.MsgTypeURL(&crosschaintypes.MsgAddInboundTracker{}), + sdk.MsgTypeURL(&crosschaintypes.MsgRemoveInboundTracker{}), sdk.MsgTypeURL(&crosschaintypes.MsgAddOutboundTracker{}), sdk.MsgTypeURL(&crosschaintypes.MsgRemoveOutboundTracker{}), sdk.MsgTypeURL(&fungibletypes.MsgPauseZRC20{}), diff --git a/x/crosschain/client/cli/tx.go b/x/crosschain/client/cli/tx.go index 7a735606e6..b7a9a4e402 100644 --- a/x/crosschain/client/cli/tx.go +++ b/x/crosschain/client/cli/tx.go @@ -31,6 +31,7 @@ func GetTxCmd() *cobra.Command { CmdWhitelistERC20(), CmdAbortStuckCCTX(), CmdRefundAborted(), + CmdRemoveInboundTracker(), ) return cmd diff --git a/x/crosschain/client/cli/tx_add_inbound_tracker.go b/x/crosschain/client/cli/tx_inbound_tracker.go similarity index 56% rename from x/crosschain/client/cli/tx_add_inbound_tracker.go rename to x/crosschain/client/cli/tx_inbound_tracker.go index 3c07ec97b2..a46dfb5223 100644 --- a/x/crosschain/client/cli/tx_add_inbound_tracker.go +++ b/x/crosschain/client/cli/tx_inbound_tracker.go @@ -12,6 +12,7 @@ import ( "github.com/zeta-chain/node/x/crosschain/types" ) +// CmdAddInboundTracker returns the command to add an inbound tracker func CmdAddInboundTracker() *cobra.Command { cmd := &cobra.Command{ Use: "add-inbound-tracker [chain-id] [tx-hash] [coin-type]", @@ -47,3 +48,34 @@ func CmdAddInboundTracker() *cobra.Command { return cmd } + +// CmdRemoveInboundTracker returns the command to remove an inbound tracker +func CmdRemoveInboundTracker() *cobra.Command { + cmd := &cobra.Command{ + Use: "remove-inbound-tracker [chain-id] [tx-hash]", + Short: `Remove an inbound tracker`, + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) (err error) { + argChain, err := strconv.ParseInt(args[0], 10, 64) + if err != nil { + return err + } + argTxHash := args[1] + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + msg := types.NewMsgRemoveInboundTracker( + clientCtx.GetFromAddress().String(), + argChain, + argTxHash, + ) + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} diff --git a/x/crosschain/keeper/msg_remove_inbound_tracker.go b/x/crosschain/keeper/msg_remove_inbound_tracker.go new file mode 100644 index 0000000000..4bdd4a8c85 --- /dev/null +++ b/x/crosschain/keeper/msg_remove_inbound_tracker.go @@ -0,0 +1,28 @@ +package keeper + +import ( + "context" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + authoritytypes "github.com/zeta-chain/node/x/authority/types" + "github.com/zeta-chain/node/x/crosschain/types" +) + +// RemoveInboundTracker removes the inbound tracker if it exists. +func (k msgServer) RemoveInboundTracker( + goCtx context.Context, + msg *types.MsgRemoveInboundTracker, +) (*types.MsgRemoveInboundTrackerResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + // check if authorized + err := k.GetAuthorityKeeper().CheckAuthorization(ctx, msg) + if err != nil { + return nil, errorsmod.Wrap(authoritytypes.ErrUnauthorized, err.Error()) + } + + k.RemoveInboundTrackerIfExists(ctx, msg.ChainId, msg.TxHash) + return &types.MsgRemoveInboundTrackerResponse{}, nil +} diff --git a/x/crosschain/keeper/msg_remove_inbound_tracker_test.go b/x/crosschain/keeper/msg_remove_inbound_tracker_test.go new file mode 100644 index 0000000000..096b2ac588 --- /dev/null +++ b/x/crosschain/keeper/msg_remove_inbound_tracker_test.go @@ -0,0 +1,93 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + "github.com/zeta-chain/node/pkg/coin" + keepertest "github.com/zeta-chain/node/testutil/keeper" + "github.com/zeta-chain/node/testutil/sample" + authoritytypes "github.com/zeta-chain/node/x/authority/types" + "github.com/zeta-chain/node/x/crosschain/keeper" + "github.com/zeta-chain/node/x/crosschain/types" +) + +func TestMsgServer_RemoveInboundTracker(t *testing.T) { + t.Run("fail if creator is not admin", func(t *testing.T) { + // Arrange + k, ctx, _, _ := keepertest.CrosschainKeeperWithMocks(t, keepertest.CrosschainMockOptions{ + UseAuthorityMock: true, + }) + + msgServer := keeper.NewMsgServerImpl(*k) + nonAdmin := sample.AccAddress() + authorityMock := keepertest.GetCrosschainAuthorityMock(t, k) + txHash := "hash" + chainID := int64(1) + msg := types.MsgRemoveInboundTracker{ + Creator: nonAdmin, + ChainId: chainID, + TxHash: txHash, + } + keepertest.MockCheckAuthorization(&authorityMock.Mock, &msg, authoritytypes.ErrUnauthorized) + + // Act + _, err := msgServer.RemoveInboundTracker(ctx, &msg) + + // Assert + require.ErrorIs(t, err, authoritytypes.ErrUnauthorized) + }) + + t.Run("successfully remove inbound tracker", func(t *testing.T) { + // Arrange + k, ctx, _, _ := keepertest.CrosschainKeeperWithMocks(t, keepertest.CrosschainMockOptions{ + UseAuthorityMock: true, + }) + msgServer := keeper.NewMsgServerImpl(*k) + admin := sample.AccAddress() + authorityMock := keepertest.GetCrosschainAuthorityMock(t, k) + txHash := "hash" + chainID := int64(1) + msg := types.MsgRemoveInboundTracker{ + Creator: admin, + ChainId: chainID, + TxHash: txHash, + } + k.SetInboundTracker(ctx, types.InboundTracker{ChainId: chainID, TxHash: txHash, CoinType: coin.CoinType_Gas}) + keepertest.MockCheckAuthorization(&authorityMock.Mock, &msg, nil) + + // Act + _, err := msgServer.RemoveInboundTracker(ctx, &msg) + + // Assert + require.NoError(t, err) + _, found := k.GetInboundTracker(ctx, chainID, txHash) + require.False(t, found) + }) + + t.Run("do nothing if inbound tracker does not exist", func(t *testing.T) { + // Arrange + k, ctx, _, _ := keepertest.CrosschainKeeperWithMocks(t, keepertest.CrosschainMockOptions{ + UseAuthorityMock: true, + }) + msgServer := keeper.NewMsgServerImpl(*k) + admin := sample.AccAddress() + authorityMock := keepertest.GetCrosschainAuthorityMock(t, k) + txHash := "hash" + chainID := int64(1) + msg := types.MsgRemoveInboundTracker{ + Creator: admin, + ChainId: chainID, + TxHash: txHash, + } + keepertest.MockCheckAuthorization(&authorityMock.Mock, &msg, nil) + + // Act + _, err := msgServer.RemoveInboundTracker(ctx, &msg) + + // Assert + require.NoError(t, err) + _, found := k.GetInboundTracker(ctx, chainID, txHash) + require.False(t, found) + }) +} diff --git a/x/crosschain/keeper/msg_server_add_inbound_tracker_test.go b/x/crosschain/keeper/msg_server_add_inbound_tracker_test.go index ecaf21d495..574e9f01c2 100644 --- a/x/crosschain/keeper/msg_server_add_inbound_tracker_test.go +++ b/x/crosschain/keeper/msg_server_add_inbound_tracker_test.go @@ -16,7 +16,7 @@ import ( observertypes "github.com/zeta-chain/node/x/observer/types" ) -func TestMsgServer_AddToInboundTracker(t *testing.T) { +func TestMsgServer_AddInboundTracker(t *testing.T) { t.Run("fail normal user submit", func(t *testing.T) { k, ctx, _, _ := keepertest.CrosschainKeeperWithMocks(t, keepertest.CrosschainMockOptions{ UseAuthorityMock: true, diff --git a/x/crosschain/simulation/operations.go b/x/crosschain/simulation/operations.go index 646d87a370..8579e1ead8 100644 --- a/x/crosschain/simulation/operations.go +++ b/x/crosschain/simulation/operations.go @@ -165,6 +165,9 @@ func WeightedOperations( }, ) + // TODO : Add the new test for MsgRemoveInboundTracker + // https://github.com/zeta-chain/node/issues/3479 + return simulation.WeightedOperations{ simulation.NewWeightedOperation( weightVoteGasPrice, diff --git a/x/crosschain/types/codec.go b/x/crosschain/types/codec.go index b93795aa3a..896fa20213 100644 --- a/x/crosschain/types/codec.go +++ b/x/crosschain/types/codec.go @@ -19,6 +19,7 @@ func RegisterCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgUpdateTssAddress{}, "crosschain/UpdateTssAddress", nil) cdc.RegisterConcrete(&MsgAbortStuckCCTX{}, "crosschain/AbortStuckCCTX", nil) cdc.RegisterConcrete(&MsgUpdateRateLimiterFlags{}, "crosschain/UpdateRateLimiterFlags", nil) + cdc.RegisterConcrete(&MsgRemoveInboundTracker{}, "crosschain/RemoveInboundTracker", nil) // legacy messages defined for backward compatibility cdc.RegisterConcrete(&MsgAddToInTxTracker{}, "crosschain/AddToInTxTracker", nil) @@ -42,6 +43,7 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { &MsgUpdateTssAddress{}, &MsgAbortStuckCCTX{}, &MsgUpdateRateLimiterFlags{}, + &MsgRemoveInboundTracker{}, // legacy messages defined for backward compatibility &MsgAddToInTxTracker{}, diff --git a/x/crosschain/types/message_remove_inbound_tracker.go b/x/crosschain/types/message_remove_inbound_tracker.go new file mode 100644 index 0000000000..2f8e6370c1 --- /dev/null +++ b/x/crosschain/types/message_remove_inbound_tracker.go @@ -0,0 +1,51 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +const TypeMsgRemoveInboundTracker = "RemoveInboundTracker" + +var _ sdk.Msg = &MsgRemoveInboundTracker{} + +func NewMsgRemoveInboundTracker(creator string, chain int64, txHash string) *MsgRemoveInboundTracker { + return &MsgRemoveInboundTracker{ + Creator: creator, + ChainId: chain, + TxHash: txHash, + } +} + +func (msg *MsgRemoveInboundTracker) Route() string { + return RouterKey +} + +func (msg *MsgRemoveInboundTracker) Type() string { + return TypeMsgRemoveInboundTracker +} + +func (msg *MsgRemoveInboundTracker) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgRemoveInboundTracker) GetSignBytes() []byte { + bz := ModuleCdc.MustMarshalJSON(msg) + return sdk.MustSortJSON(bz) +} + +func (msg *MsgRemoveInboundTracker) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + if msg.ChainId < 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidChainID, "chain id (%d)", msg.ChainId) + } + return nil +} diff --git a/x/crosschain/types/message_remove_inbound_tracker_test.go b/x/crosschain/types/message_remove_inbound_tracker_test.go new file mode 100644 index 0000000000..d18a17a852 --- /dev/null +++ b/x/crosschain/types/message_remove_inbound_tracker_test.go @@ -0,0 +1,148 @@ +package types_test + +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/stretchr/testify/require" + "github.com/zeta-chain/node/pkg/chains" + "github.com/zeta-chain/node/testutil/sample" + "github.com/zeta-chain/node/x/crosschain/types" +) + +func TestMsgRemoveInboundTracker_ValidateBasic(t *testing.T) { + tests := []struct { + name string + msg *types.MsgRemoveInboundTracker + err error + }{ + { + name: "invalid address", + msg: types.NewMsgRemoveInboundTracker( + "invalid_address", + chains.Goerli.ChainId, + sample.ZetaIndex(t), + ), + err: sdkerrors.ErrInvalidAddress, + }, + { + name: "invalid if chain id is negative", + msg: types.NewMsgRemoveInboundTracker( + sample.AccAddress(), + -1, + sample.ZetaIndex(t), + ), + err: sdkerrors.ErrInvalidChainID, + }, + { + name: "valid", + msg: types.NewMsgRemoveInboundTracker( + sample.AccAddress(), + chains.Goerli.ChainId, + sample.ZetaIndex(t), + ), + err: nil, + }, + { + name: "valid even if chain id is not supported", + msg: types.NewMsgRemoveInboundTracker( + sample.AccAddress(), + 999, + sample.ZetaIndex(t), + ), + err: nil, + }, + { + name: "valid even if tx hash is not supported", + msg: types.NewMsgRemoveInboundTracker( + sample.AccAddress(), + chains.Goerli.ChainId, + "invalid", + ), + err: nil, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.msg.ValidateBasic() + if tt.err != nil { + require.ErrorIs(t, err, tt.err) + return + } + require.NoError(t, err) + }) + } +} + +func TestMsgRemoveInboundTracker_GetSigners(t *testing.T) { + signer := sample.AccAddress() + tests := []struct { + name string + msg *types.MsgRemoveInboundTracker + panics bool + }{ + { + name: "valid", + msg: types.NewMsgRemoveInboundTracker( + signer, + chains.Goerli.ChainId, + sample.ZetaIndex(t), + ), + panics: false, + }, + { + name: "invalid signer", + msg: types.NewMsgRemoveInboundTracker( + "invalid_address", + chains.Goerli.ChainId, + "hash", + ), + panics: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if !tt.panics { + signers := tt.msg.GetSigners() + require.Equal(t, []sdk.AccAddress{sdk.MustAccAddressFromBech32(signer)}, signers) + } else { + require.Panics(t, func() { + tt.msg.GetSigners() + }) + } + }) + } +} + +func TestMsgRemoveInboundTracker_Type(t *testing.T) { + msg := types.NewMsgRemoveInboundTracker( + sample.AccAddress(), + chains.Goerli.ChainId, + sample.ZetaIndex(t), + ) + require.Equal(t, types.TypeMsgRemoveInboundTracker, msg.Type()) +} + +func TestMsgRemoveInboundTracker_Route(t *testing.T) { + msg := types.NewMsgRemoveInboundTracker( + sample.AccAddress(), + chains.Goerli.ChainId, + sample.ZetaIndex(t), + ) + require.Equal(t, types.RouterKey, msg.Route()) +} + +func TestMsgRemoveInboundTracker_GetSignBytes(t *testing.T) { + msg := types.NewMsgRemoveInboundTracker( + sample.AccAddress(), + chains.Goerli.ChainId, + sample.ZetaIndex(t), + ) + + require.NotPanics(t, func() { + msg.GetSignBytes() + }) + require.NotEmpty(t, msg.GetSignBytes()) + require.Equal(t, string(msg.GetSignBytes()), string(msg.GetSignBytes()), "sign bytes should be deterministic") +} diff --git a/x/crosschain/types/tx.pb.go b/x/crosschain/types/tx.pb.go index bfae2191f9..ed8d43c6ff 100644 --- a/x/crosschain/types/tx.pb.go +++ b/x/crosschain/types/tx.pb.go @@ -210,6 +210,9 @@ func (m *MsgUpdateTssAddressResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgUpdateTssAddressResponse proto.InternalMessageInfo +// MsgAddInboundTracker defines a message to add an inbound tracker. +// The index used for the saving the tracker to the store is of the format +// - type MsgAddInboundTracker struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` ChainId int64 `protobuf:"varint,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` @@ -341,6 +344,105 @@ func (m *MsgAddInboundTrackerResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgAddInboundTrackerResponse proto.InternalMessageInfo +// MsgRemoveInboundTracker defines a message to remove an inbound tracker. +// The index used for the fetching the tracker to the store is of the format +// - +type MsgRemoveInboundTracker struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + ChainId int64 `protobuf:"varint,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + TxHash string `protobuf:"bytes,3,opt,name=tx_hash,json=txHash,proto3" json:"tx_hash,omitempty"` +} + +func (m *MsgRemoveInboundTracker) Reset() { *m = MsgRemoveInboundTracker{} } +func (m *MsgRemoveInboundTracker) String() string { return proto.CompactTextString(m) } +func (*MsgRemoveInboundTracker) ProtoMessage() {} +func (*MsgRemoveInboundTracker) Descriptor() ([]byte, []int) { + return fileDescriptor_15f0860550897740, []int{6} +} +func (m *MsgRemoveInboundTracker) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRemoveInboundTracker) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRemoveInboundTracker.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 *MsgRemoveInboundTracker) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRemoveInboundTracker.Merge(m, src) +} +func (m *MsgRemoveInboundTracker) XXX_Size() int { + return m.Size() +} +func (m *MsgRemoveInboundTracker) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRemoveInboundTracker.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRemoveInboundTracker proto.InternalMessageInfo + +func (m *MsgRemoveInboundTracker) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgRemoveInboundTracker) GetChainId() int64 { + if m != nil { + return m.ChainId + } + return 0 +} + +func (m *MsgRemoveInboundTracker) GetTxHash() string { + if m != nil { + return m.TxHash + } + return "" +} + +type MsgRemoveInboundTrackerResponse struct { +} + +func (m *MsgRemoveInboundTrackerResponse) Reset() { *m = MsgRemoveInboundTrackerResponse{} } +func (m *MsgRemoveInboundTrackerResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRemoveInboundTrackerResponse) ProtoMessage() {} +func (*MsgRemoveInboundTrackerResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_15f0860550897740, []int{7} +} +func (m *MsgRemoveInboundTrackerResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRemoveInboundTrackerResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRemoveInboundTrackerResponse.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 *MsgRemoveInboundTrackerResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRemoveInboundTrackerResponse.Merge(m, src) +} +func (m *MsgRemoveInboundTrackerResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRemoveInboundTrackerResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRemoveInboundTrackerResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRemoveInboundTrackerResponse proto.InternalMessageInfo + // TODO: https://github.com/zeta-chain/node/issues/3083 type MsgWhitelistERC20 struct { Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` @@ -357,7 +459,7 @@ func (m *MsgWhitelistERC20) Reset() { *m = MsgWhitelistERC20{} } func (m *MsgWhitelistERC20) String() string { return proto.CompactTextString(m) } func (*MsgWhitelistERC20) ProtoMessage() {} func (*MsgWhitelistERC20) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{6} + return fileDescriptor_15f0860550897740, []int{8} } func (m *MsgWhitelistERC20) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -444,7 +546,7 @@ func (m *MsgWhitelistERC20Response) Reset() { *m = MsgWhitelistERC20Resp func (m *MsgWhitelistERC20Response) String() string { return proto.CompactTextString(m) } func (*MsgWhitelistERC20Response) ProtoMessage() {} func (*MsgWhitelistERC20Response) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{7} + return fileDescriptor_15f0860550897740, []int{9} } func (m *MsgWhitelistERC20Response) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -501,7 +603,7 @@ func (m *MsgAddOutboundTracker) Reset() { *m = MsgAddOutboundTracker{} } func (m *MsgAddOutboundTracker) String() string { return proto.CompactTextString(m) } func (*MsgAddOutboundTracker) ProtoMessage() {} func (*MsgAddOutboundTracker) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{8} + return fileDescriptor_15f0860550897740, []int{10} } func (m *MsgAddOutboundTracker) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -590,7 +692,7 @@ func (m *MsgAddOutboundTrackerResponse) Reset() { *m = MsgAddOutboundTra func (m *MsgAddOutboundTrackerResponse) String() string { return proto.CompactTextString(m) } func (*MsgAddOutboundTrackerResponse) ProtoMessage() {} func (*MsgAddOutboundTrackerResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{9} + return fileDescriptor_15f0860550897740, []int{11} } func (m *MsgAddOutboundTrackerResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -636,7 +738,7 @@ func (m *MsgRemoveOutboundTracker) Reset() { *m = MsgRemoveOutboundTrack func (m *MsgRemoveOutboundTracker) String() string { return proto.CompactTextString(m) } func (*MsgRemoveOutboundTracker) ProtoMessage() {} func (*MsgRemoveOutboundTracker) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{10} + return fileDescriptor_15f0860550897740, []int{12} } func (m *MsgRemoveOutboundTracker) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -693,7 +795,7 @@ func (m *MsgRemoveOutboundTrackerResponse) Reset() { *m = MsgRemoveOutbo func (m *MsgRemoveOutboundTrackerResponse) String() string { return proto.CompactTextString(m) } func (*MsgRemoveOutboundTrackerResponse) ProtoMessage() {} func (*MsgRemoveOutboundTrackerResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{11} + return fileDescriptor_15f0860550897740, []int{13} } func (m *MsgRemoveOutboundTrackerResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -735,7 +837,7 @@ func (m *MsgVoteGasPrice) Reset() { *m = MsgVoteGasPrice{} } func (m *MsgVoteGasPrice) String() string { return proto.CompactTextString(m) } func (*MsgVoteGasPrice) ProtoMessage() {} func (*MsgVoteGasPrice) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{12} + return fileDescriptor_15f0860550897740, []int{14} } func (m *MsgVoteGasPrice) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -814,7 +916,7 @@ func (m *MsgVoteGasPriceResponse) Reset() { *m = MsgVoteGasPriceResponse func (m *MsgVoteGasPriceResponse) String() string { return proto.CompactTextString(m) } func (*MsgVoteGasPriceResponse) ProtoMessage() {} func (*MsgVoteGasPriceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{13} + return fileDescriptor_15f0860550897740, []int{15} } func (m *MsgVoteGasPriceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -862,7 +964,7 @@ func (m *MsgVoteOutbound) Reset() { *m = MsgVoteOutbound{} } func (m *MsgVoteOutbound) String() string { return proto.CompactTextString(m) } func (*MsgVoteOutbound) ProtoMessage() {} func (*MsgVoteOutbound) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{14} + return fileDescriptor_15f0860550897740, []int{16} } func (m *MsgVoteOutbound) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -968,7 +1070,7 @@ func (m *MsgVoteOutboundResponse) Reset() { *m = MsgVoteOutboundResponse func (m *MsgVoteOutboundResponse) String() string { return proto.CompactTextString(m) } func (*MsgVoteOutboundResponse) ProtoMessage() {} func (*MsgVoteOutboundResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{15} + return fileDescriptor_15f0860550897740, []int{17} } func (m *MsgVoteOutboundResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1031,7 +1133,7 @@ func (m *MsgVoteInbound) Reset() { *m = MsgVoteInbound{} } func (m *MsgVoteInbound) String() string { return proto.CompactTextString(m) } func (*MsgVoteInbound) ProtoMessage() {} func (*MsgVoteInbound) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{16} + return fileDescriptor_15f0860550897740, []int{18} } func (m *MsgVoteInbound) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1193,7 +1295,7 @@ func (m *MsgVoteInboundResponse) Reset() { *m = MsgVoteInboundResponse{} func (m *MsgVoteInboundResponse) String() string { return proto.CompactTextString(m) } func (*MsgVoteInboundResponse) ProtoMessage() {} func (*MsgVoteInboundResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{17} + return fileDescriptor_15f0860550897740, []int{19} } func (m *MsgVoteInboundResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1231,7 +1333,7 @@ func (m *MsgAbortStuckCCTX) Reset() { *m = MsgAbortStuckCCTX{} } func (m *MsgAbortStuckCCTX) String() string { return proto.CompactTextString(m) } func (*MsgAbortStuckCCTX) ProtoMessage() {} func (*MsgAbortStuckCCTX) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{18} + return fileDescriptor_15f0860550897740, []int{20} } func (m *MsgAbortStuckCCTX) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1281,7 +1383,7 @@ func (m *MsgAbortStuckCCTXResponse) Reset() { *m = MsgAbortStuckCCTXResp func (m *MsgAbortStuckCCTXResponse) String() string { return proto.CompactTextString(m) } func (*MsgAbortStuckCCTXResponse) ProtoMessage() {} func (*MsgAbortStuckCCTXResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{19} + return fileDescriptor_15f0860550897740, []int{21} } func (m *MsgAbortStuckCCTXResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1320,7 +1422,7 @@ func (m *MsgRefundAbortedCCTX) Reset() { *m = MsgRefundAbortedCCTX{} } func (m *MsgRefundAbortedCCTX) String() string { return proto.CompactTextString(m) } func (*MsgRefundAbortedCCTX) ProtoMessage() {} func (*MsgRefundAbortedCCTX) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{20} + return fileDescriptor_15f0860550897740, []int{22} } func (m *MsgRefundAbortedCCTX) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1377,7 +1479,7 @@ func (m *MsgRefundAbortedCCTXResponse) Reset() { *m = MsgRefundAbortedCC func (m *MsgRefundAbortedCCTXResponse) String() string { return proto.CompactTextString(m) } func (*MsgRefundAbortedCCTXResponse) ProtoMessage() {} func (*MsgRefundAbortedCCTXResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{21} + return fileDescriptor_15f0860550897740, []int{23} } func (m *MsgRefundAbortedCCTXResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1415,7 +1517,7 @@ func (m *MsgUpdateRateLimiterFlags) Reset() { *m = MsgUpdateRateLimiterF func (m *MsgUpdateRateLimiterFlags) String() string { return proto.CompactTextString(m) } func (*MsgUpdateRateLimiterFlags) ProtoMessage() {} func (*MsgUpdateRateLimiterFlags) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{22} + return fileDescriptor_15f0860550897740, []int{24} } func (m *MsgUpdateRateLimiterFlags) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1465,7 +1567,7 @@ func (m *MsgUpdateRateLimiterFlagsResponse) Reset() { *m = MsgUpdateRate func (m *MsgUpdateRateLimiterFlagsResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateRateLimiterFlagsResponse) ProtoMessage() {} func (*MsgUpdateRateLimiterFlagsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{23} + return fileDescriptor_15f0860550897740, []int{25} } func (m *MsgUpdateRateLimiterFlagsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1506,7 +1608,7 @@ func (m *MsgMigrateERC20CustodyFunds) Reset() { *m = MsgMigrateERC20Cust func (m *MsgMigrateERC20CustodyFunds) String() string { return proto.CompactTextString(m) } func (*MsgMigrateERC20CustodyFunds) ProtoMessage() {} func (*MsgMigrateERC20CustodyFunds) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{24} + return fileDescriptor_15f0860550897740, []int{26} } func (m *MsgMigrateERC20CustodyFunds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1571,7 +1673,7 @@ func (m *MsgMigrateERC20CustodyFundsResponse) Reset() { *m = MsgMigrateE func (m *MsgMigrateERC20CustodyFundsResponse) String() string { return proto.CompactTextString(m) } func (*MsgMigrateERC20CustodyFundsResponse) ProtoMessage() {} func (*MsgMigrateERC20CustodyFundsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{25} + return fileDescriptor_15f0860550897740, []int{27} } func (m *MsgMigrateERC20CustodyFundsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1619,7 +1721,7 @@ func (m *MsgUpdateERC20CustodyPauseStatus) Reset() { *m = MsgUpdateERC20 func (m *MsgUpdateERC20CustodyPauseStatus) String() string { return proto.CompactTextString(m) } func (*MsgUpdateERC20CustodyPauseStatus) ProtoMessage() {} func (*MsgUpdateERC20CustodyPauseStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{26} + return fileDescriptor_15f0860550897740, []int{28} } func (m *MsgUpdateERC20CustodyPauseStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1679,7 +1781,7 @@ func (m *MsgUpdateERC20CustodyPauseStatusResponse) Reset() { func (m *MsgUpdateERC20CustodyPauseStatusResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateERC20CustodyPauseStatusResponse) ProtoMessage() {} func (*MsgUpdateERC20CustodyPauseStatusResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_15f0860550897740, []int{27} + return fileDescriptor_15f0860550897740, []int{29} } func (m *MsgUpdateERC20CustodyPauseStatusResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1722,6 +1824,8 @@ func init() { proto.RegisterType((*MsgUpdateTssAddressResponse)(nil), "zetachain.zetacore.crosschain.MsgUpdateTssAddressResponse") proto.RegisterType((*MsgAddInboundTracker)(nil), "zetachain.zetacore.crosschain.MsgAddInboundTracker") proto.RegisterType((*MsgAddInboundTrackerResponse)(nil), "zetachain.zetacore.crosschain.MsgAddInboundTrackerResponse") + proto.RegisterType((*MsgRemoveInboundTracker)(nil), "zetachain.zetacore.crosschain.MsgRemoveInboundTracker") + proto.RegisterType((*MsgRemoveInboundTrackerResponse)(nil), "zetachain.zetacore.crosschain.MsgRemoveInboundTrackerResponse") proto.RegisterType((*MsgWhitelistERC20)(nil), "zetachain.zetacore.crosschain.MsgWhitelistERC20") proto.RegisterType((*MsgWhitelistERC20Response)(nil), "zetachain.zetacore.crosschain.MsgWhitelistERC20Response") proto.RegisterType((*MsgAddOutboundTracker)(nil), "zetachain.zetacore.crosschain.MsgAddOutboundTracker") @@ -1751,128 +1855,131 @@ func init() { } var fileDescriptor_15f0860550897740 = []byte{ - // 1933 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xcd, 0x6f, 0x1b, 0xc7, - 0x15, 0xf7, 0xca, 0xfa, 0x20, 0x1f, 0xa9, 0x0f, 0xaf, 0x65, 0x69, 0xbd, 0x0a, 0x69, 0x59, 0xae, - 0x0d, 0xc1, 0xb0, 0x49, 0x87, 0x4e, 0x9d, 0xd4, 0x29, 0x92, 0x5a, 0x4c, 0xec, 0x0a, 0x08, 0x63, - 0x61, 0x23, 0xa7, 0x6d, 0x50, 0x74, 0xb1, 0xdc, 0x1d, 0xad, 0x16, 0x22, 0x77, 0xb6, 0x3b, 0x43, - 0x86, 0x74, 0x0b, 0xb4, 0x30, 0x5a, 0xa0, 0x40, 0x0f, 0x4d, 0x81, 0x9e, 0x7a, 0x2f, 0xd0, 0xf6, - 0x94, 0x63, 0xff, 0x84, 0x1c, 0x7a, 0xc8, 0xb1, 0xe8, 0xc1, 0x28, 0xec, 0x43, 0x4e, 0xbd, 0xf4, - 0x2f, 0x28, 0xf6, 0xcd, 0xec, 0x8a, 0x5c, 0x7e, 0x8a, 0x42, 0x81, 0x5e, 0xc4, 0x99, 0x37, 0xef, - 0x6b, 0x7e, 0xf3, 0xde, 0xcc, 0x7b, 0x2b, 0xb8, 0xf5, 0x9c, 0x70, 0xcb, 0x3e, 0xb6, 0x3c, 0xbf, - 0x8c, 0x23, 0x1a, 0x92, 0xb2, 0x1d, 0x52, 0xc6, 0x04, 0x8d, 0x77, 0x4a, 0x41, 0x48, 0x39, 0x55, - 0x0b, 0x09, 0x5f, 0x29, 0xe6, 0x2b, 0x9d, 0xf2, 0xe9, 0xeb, 0x2e, 0x75, 0x29, 0x72, 0x96, 0xa3, - 0x91, 0x10, 0xd2, 0x6f, 0x0f, 0x51, 0x1e, 0x9c, 0xb8, 0x65, 0x24, 0x31, 0xf9, 0x23, 0x79, 0x6f, - 0x8d, 0xe2, 0xa5, 0x9e, 0x8f, 0x7f, 0x26, 0xe8, 0x0c, 0x42, 0x4a, 0x8f, 0x98, 0xfc, 0x91, 0xbc, - 0x0f, 0xc6, 0x6f, 0x2e, 0xb4, 0x38, 0x31, 0x1b, 0x5e, 0xd3, 0xe3, 0x24, 0x34, 0x8f, 0x1a, 0x96, - 0x1b, 0xcb, 0x55, 0xc6, 0xcb, 0xe1, 0xd0, 0xc4, 0xb1, 0x19, 0x03, 0xa4, 0x6f, 0xda, 0x94, 0x35, - 0x29, 0x2b, 0x37, 0x99, 0x5b, 0x6e, 0xbf, 0x19, 0xfd, 0x88, 0x85, 0x9d, 0xdf, 0x29, 0xa0, 0xd6, - 0x98, 0x5b, 0xf3, 0xdc, 0xc8, 0xde, 0x21, 0x63, 0x8f, 0x5b, 0xbe, 0xc3, 0x54, 0x0d, 0x96, 0xec, - 0x90, 0x58, 0x9c, 0x86, 0x9a, 0xb2, 0xad, 0xec, 0x66, 0x8d, 0x78, 0xaa, 0x5e, 0x85, 0x8c, 0xd0, - 0xed, 0x39, 0xda, 0xdc, 0xb6, 0xb2, 0x7b, 0xd1, 0x58, 0xc2, 0xf9, 0xbe, 0xa3, 0x3e, 0x80, 0x45, - 0xab, 0x49, 0x5b, 0x3e, 0xd7, 0x2e, 0x46, 0x32, 0x7b, 0xc5, 0xaf, 0x5e, 0x5e, 0xbb, 0xf0, 0xcf, - 0x97, 0xd7, 0x36, 0x84, 0x71, 0xe6, 0x9c, 0x94, 0x3c, 0x5a, 0x6e, 0x5a, 0xfc, 0xb8, 0xf4, 0xcc, - 0xf3, 0xb9, 0x21, 0xb9, 0x1f, 0xe6, 0x5f, 0x7c, 0xf3, 0xe5, 0xed, 0xd8, 0xc0, 0xce, 0x1b, 0xa0, - 0x0f, 0x3a, 0x64, 0x10, 0x16, 0x50, 0x9f, 0x91, 0x9d, 0x1f, 0xc3, 0xe5, 0x1a, 0x73, 0x9f, 0x05, - 0x8e, 0x58, 0x7c, 0xe4, 0x38, 0x21, 0x61, 0xe3, 0xfc, 0x2d, 0x00, 0x70, 0xc6, 0xcc, 0xa0, 0x55, - 0x3f, 0x21, 0x5d, 0xf4, 0x38, 0x6b, 0x64, 0x39, 0x63, 0x07, 0x48, 0x48, 0xd9, 0x2e, 0xc0, 0xd6, - 0x10, 0xed, 0x89, 0xf1, 0xbf, 0xcd, 0xc1, 0x7a, 0x8d, 0xb9, 0x8f, 0x1c, 0x67, 0xdf, 0xaf, 0xd3, - 0x96, 0xef, 0x1c, 0x86, 0x96, 0x7d, 0x42, 0xc2, 0xd9, 0xe0, 0xda, 0x84, 0x25, 0xde, 0x31, 0x8f, - 0x2d, 0x76, 0x2c, 0xf0, 0x32, 0x16, 0x79, 0xe7, 0xfb, 0x16, 0x3b, 0x56, 0xf7, 0x20, 0x1b, 0x85, - 0x94, 0xc9, 0xbb, 0x01, 0xd1, 0xe6, 0xb7, 0x95, 0xdd, 0x95, 0xca, 0xcd, 0xd2, 0x90, 0x08, 0x0f, - 0x4e, 0xdc, 0x12, 0xc6, 0x5e, 0x95, 0x7a, 0xfe, 0x61, 0x37, 0x20, 0x46, 0xc6, 0x96, 0x23, 0xf5, - 0x3d, 0x58, 0xc0, 0x60, 0xd3, 0x16, 0xb6, 0x95, 0xdd, 0x5c, 0xe5, 0x5b, 0xa3, 0xe4, 0x65, 0x44, - 0x1e, 0x44, 0x3f, 0x7b, 0x73, 0x9a, 0x62, 0x08, 0x31, 0xf5, 0x3a, 0x40, 0xbd, 0x41, 0xed, 0x13, - 0xe1, 0xdf, 0x22, 0x9e, 0x67, 0xb4, 0x9c, 0x45, 0x2a, 0xba, 0x59, 0x80, 0x0c, 0xef, 0x98, 0x9e, - 0xef, 0x90, 0x8e, 0xb6, 0x14, 0x6d, 0x0d, 0x19, 0x96, 0x78, 0x67, 0x3f, 0x22, 0xa5, 0x90, 0x2d, - 0xc2, 0x1b, 0xc3, 0x90, 0x4b, 0xa0, 0xfd, 0xd3, 0x1c, 0x5c, 0xaa, 0x31, 0xf7, 0x07, 0xc7, 0x1e, - 0x27, 0x0d, 0x8f, 0xf1, 0x0f, 0x8d, 0x6a, 0xe5, 0xde, 0x18, 0x5c, 0x6f, 0xc0, 0x32, 0x09, 0xed, - 0xca, 0x3d, 0xd3, 0x12, 0x67, 0x24, 0x4f, 0x36, 0x8f, 0xc4, 0x38, 0x2a, 0x7a, 0xc1, 0xbf, 0xd8, - 0x0f, 0xbe, 0x0a, 0xf3, 0xbe, 0xd5, 0x14, 0xf0, 0x66, 0x0d, 0x1c, 0xab, 0x1b, 0xb0, 0xc8, 0xba, - 0xcd, 0x3a, 0x6d, 0x20, 0x68, 0x59, 0x43, 0xce, 0x54, 0x1d, 0x32, 0x0e, 0xb1, 0xbd, 0xa6, 0xd5, - 0x60, 0x88, 0xc4, 0xb2, 0x91, 0xcc, 0xd5, 0x2d, 0xc8, 0xba, 0x16, 0x13, 0x79, 0x2a, 0x50, 0x30, - 0x32, 0xae, 0xc5, 0x3e, 0x8a, 0xe6, 0x6a, 0x15, 0x96, 0x1b, 0xde, 0x4f, 0x5b, 0x9e, 0xe3, 0xf1, - 0xae, 0x69, 0x5b, 0x81, 0x96, 0x99, 0x2a, 0x2f, 0xf2, 0x89, 0x50, 0xd5, 0x0a, 0x52, 0x38, 0x9a, - 0x70, 0x75, 0x00, 0xa6, 0x18, 0xc4, 0x08, 0x94, 0xe7, 0x7d, 0xa0, 0x08, 0xd0, 0xf2, 0xcf, 0x7b, - 0x41, 0x29, 0x00, 0xd8, 0x76, 0x72, 0x70, 0x32, 0x21, 0x22, 0x0a, 0x1e, 0xdb, 0xce, 0x6f, 0xe7, - 0xe0, 0x8a, 0x38, 0xa9, 0xa7, 0x2d, 0x7e, 0xfe, 0x20, 0x5f, 0x87, 0x05, 0x9f, 0xfa, 0x36, 0x41, - 0xfc, 0xe7, 0x0d, 0x31, 0xe9, 0x0d, 0xfd, 0xf9, 0xbe, 0xd0, 0xff, 0x7f, 0x0b, 0xdb, 0xf7, 0xa0, - 0x30, 0x14, 0x8c, 0x04, 0xf2, 0x02, 0x80, 0xc7, 0xcc, 0x90, 0x34, 0x69, 0x9b, 0x38, 0x88, 0x4b, - 0xc6, 0xc8, 0x7a, 0xcc, 0x10, 0x84, 0x1d, 0x06, 0x5a, 0x8d, 0xb9, 0x62, 0xf6, 0xbf, 0xc3, 0x33, - 0xe5, 0xf4, 0x0e, 0x6c, 0x8f, 0x32, 0x9a, 0xe4, 0xdb, 0xdf, 0x15, 0x58, 0xad, 0x31, 0xf7, 0x53, - 0xca, 0xc9, 0x13, 0x8b, 0x1d, 0x84, 0x9e, 0x4d, 0x66, 0x76, 0x28, 0x88, 0xa4, 0x63, 0x87, 0x70, - 0xa2, 0x5e, 0x87, 0x7c, 0x10, 0x7a, 0x34, 0x8c, 0x02, 0xff, 0x88, 0x10, 0x3c, 0x89, 0x79, 0x23, - 0x17, 0xd3, 0x1e, 0x13, 0x64, 0x11, 0x47, 0xe5, 0xb7, 0x9a, 0x75, 0x12, 0x62, 0x20, 0xcc, 0x1b, - 0x39, 0xa4, 0x7d, 0x8c, 0x24, 0x55, 0x87, 0x45, 0xd6, 0x0a, 0x82, 0x46, 0x57, 0x24, 0x24, 0x1e, - 0x94, 0xa4, 0xa4, 0xb6, 0x7c, 0x15, 0x36, 0x53, 0xbb, 0x49, 0x76, 0xfa, 0xc5, 0x62, 0xb2, 0xd3, - 0x18, 0x8c, 0x31, 0x3b, 0xdd, 0x02, 0xcc, 0x05, 0x11, 0x3f, 0x22, 0x39, 0x32, 0x11, 0x01, 0x43, - 0xe7, 0x2d, 0xd8, 0xa0, 0x75, 0x46, 0xc2, 0x36, 0x71, 0x4c, 0x2a, 0x75, 0xf5, 0x5e, 0xe0, 0xeb, - 0xf1, 0x6a, 0x6c, 0x08, 0xa5, 0xaa, 0x50, 0x1c, 0x94, 0x92, 0x51, 0x4a, 0x3c, 0xf7, 0x98, 0xcb, - 0xad, 0x6f, 0xa5, 0xa5, 0xf7, 0x30, 0x66, 0x91, 0x45, 0x7d, 0x17, 0xf4, 0x41, 0x25, 0xd1, 0xcd, - 0xd3, 0x62, 0xc4, 0xd1, 0x00, 0x15, 0x6c, 0xa6, 0x15, 0x3c, 0xb1, 0xd8, 0x33, 0x46, 0x1c, 0x95, - 0xc2, 0xcd, 0x41, 0x61, 0x72, 0x74, 0x44, 0x6c, 0xee, 0xb5, 0x09, 0xaa, 0x11, 0x67, 0x98, 0x43, - 0x98, 0x0b, 0xf2, 0x7e, 0xba, 0x32, 0x78, 0x3f, 0xed, 0xfb, 0xdc, 0xb8, 0x9e, 0x36, 0xf3, 0x61, - 0xac, 0x29, 0x89, 0xa4, 0x83, 0xc9, 0x06, 0xc5, 0x8d, 0x99, 0x47, 0xc7, 0xc7, 0x6a, 0x14, 0x57, - 0xe9, 0x4f, 0x60, 0xa5, 0x6d, 0x35, 0x5a, 0xc4, 0x0c, 0x89, 0x4d, 0xbc, 0x28, 0xd7, 0x44, 0x48, - 0xbc, 0x3d, 0xfe, 0x2e, 0xfd, 0xcf, 0xcb, 0x6b, 0x57, 0xba, 0x56, 0xb3, 0xf1, 0x70, 0xa7, 0x5f, - 0x7a, 0xc7, 0x58, 0x46, 0x82, 0x21, 0xe7, 0xea, 0x07, 0xb0, 0xc8, 0xb8, 0xc5, 0x5b, 0xe2, 0x86, - 0x5f, 0xa9, 0xdc, 0x19, 0xf9, 0xe0, 0x8a, 0xb2, 0x50, 0x0a, 0x7e, 0x82, 0x32, 0x86, 0x94, 0x55, - 0x6f, 0xc2, 0x4a, 0xb2, 0x5d, 0x64, 0x94, 0x4f, 0xc2, 0x72, 0x4c, 0xad, 0x46, 0x44, 0xf5, 0x0e, - 0xa8, 0x09, 0x5b, 0x54, 0x9c, 0x88, 0x8c, 0xce, 0x20, 0x16, 0x6b, 0xf1, 0xca, 0x21, 0x63, 0x1f, - 0xe3, 0x65, 0xd9, 0x57, 0x0e, 0x64, 0x67, 0x2a, 0x07, 0x46, 0x66, 0x4b, 0x0c, 0x78, 0x92, 0x2d, - 0x7f, 0x5d, 0x82, 0x15, 0xb9, 0x26, 0x5f, 0xea, 0x31, 0xc9, 0x12, 0x3d, 0x98, 0xc4, 0x77, 0x48, - 0x28, 0x33, 0x45, 0xce, 0xd4, 0x5b, 0xb0, 0x2a, 0x46, 0x66, 0xea, 0xf9, 0x5d, 0x16, 0xe4, 0xaa, - 0xbc, 0x3b, 0x74, 0xc8, 0xc8, 0x03, 0x09, 0xe5, 0x3b, 0x90, 0xcc, 0x23, 0x28, 0xe3, 0xb1, 0x84, - 0x72, 0x41, 0xa8, 0x88, 0xa9, 0x02, 0xca, 0xd3, 0x9a, 0x73, 0xf1, 0x2c, 0x35, 0x67, 0xb4, 0xa9, - 0x26, 0x61, 0xcc, 0x72, 0x05, 0xee, 0x59, 0x23, 0x9e, 0x46, 0xf7, 0x92, 0xe7, 0xf7, 0xa4, 0x76, - 0x16, 0x97, 0x73, 0x92, 0x86, 0x19, 0x7d, 0x0f, 0xd6, 0x63, 0x96, 0xbe, 0x3c, 0x16, 0x69, 0xa8, - 0xca, 0xb5, 0xde, 0xf4, 0xed, 0x2b, 0x13, 0x72, 0xc8, 0x76, 0x5a, 0x26, 0xf4, 0x1d, 0x70, 0x7e, - 0xb6, 0x7a, 0x6f, 0x0b, 0xb2, 0xbc, 0x63, 0xd2, 0xd0, 0x73, 0x3d, 0x5f, 0x5b, 0x16, 0x58, 0xf2, - 0xce, 0x53, 0x9c, 0x47, 0x77, 0xb4, 0xc5, 0x18, 0xe1, 0xda, 0x0a, 0x2e, 0x88, 0x89, 0x7a, 0x0d, - 0x72, 0xa4, 0x4d, 0x7c, 0x2e, 0xdf, 0xc2, 0x55, 0xf4, 0x0a, 0x90, 0x84, 0x4f, 0xa1, 0x1a, 0xc2, - 0x55, 0x6c, 0x12, 0x6c, 0xda, 0x30, 0x6d, 0xea, 0xf3, 0xd0, 0xb2, 0xb9, 0xd9, 0x26, 0x21, 0xf3, - 0xa8, 0xaf, 0xad, 0xa1, 0x9f, 0x0f, 0x4a, 0x63, 0x3b, 0xaf, 0xe8, 0x81, 0x46, 0xf9, 0xaa, 0x14, - 0xff, 0x54, 0x48, 0x1b, 0x9b, 0xc1, 0xf0, 0x05, 0xf5, 0x47, 0xd1, 0xb1, 0xb7, 0x49, 0xc8, 0x4d, - 0x1a, 0x70, 0x8f, 0xfa, 0x4c, 0xbb, 0x84, 0x95, 0xc0, 0x9d, 0x09, 0x86, 0x0c, 0x14, 0x7a, 0x2a, - 0x64, 0xf6, 0xe6, 0xa3, 0x28, 0x88, 0x42, 0xa5, 0x87, 0xa8, 0xd6, 0x20, 0x6f, 0x5b, 0x8d, 0x46, - 0xa2, 0x58, 0x45, 0xc5, 0xb7, 0x27, 0x28, 0xae, 0x5a, 0x8d, 0x86, 0xd4, 0x60, 0xe4, 0xec, 0xd3, - 0x89, 0x7a, 0x17, 0x2e, 0x7b, 0xcc, 0xec, 0xed, 0xb6, 0xa2, 0x55, 0xed, 0x32, 0x96, 0x00, 0x6b, - 0x1e, 0xab, 0x46, 0x2b, 0x18, 0xa4, 0x91, 0x8a, 0x9e, 0x0b, 0x66, 0x7d, 0xf4, 0x05, 0xd3, 0x63, - 0x57, 0x66, 0x5f, 0xff, 0x05, 0x93, 0xca, 0x63, 0x0d, 0x36, 0xfa, 0x73, 0x35, 0x49, 0xe3, 0xcf, - 0xb0, 0x9a, 0x7e, 0x54, 0xa7, 0x21, 0xff, 0x84, 0xb7, 0xec, 0x93, 0x6a, 0xf5, 0xf0, 0x87, 0xe3, - 0x9b, 0xa4, 0x31, 0x35, 0x61, 0xca, 0xea, 0x16, 0x96, 0xa0, 0xfd, 0xba, 0x13, 0xc3, 0xbf, 0x52, - 0xb0, 0x45, 0x32, 0xc8, 0x51, 0xcb, 0x77, 0x90, 0x87, 0x38, 0xe7, 0x32, 0x2e, 0x2e, 0x82, 0x48, - 0x5b, 0x52, 0xd5, 0x8a, 0xc7, 0x76, 0x59, 0x50, 0x65, 0x59, 0x3b, 0xb4, 0xdd, 0x18, 0xf0, 0x22, - 0x71, 0xf3, 0xcf, 0x0a, 0x6e, 0x42, 0x74, 0x7a, 0x86, 0xc5, 0xc9, 0x47, 0xa2, 0xd1, 0x7e, 0x1c, - 0xf5, 0xd9, 0x63, 0x7c, 0xb5, 0x41, 0x1d, 0xec, 0xcb, 0xd1, 0xe7, 0x5c, 0xa5, 0x3c, 0x29, 0x44, - 0x53, 0x66, 0x64, 0x94, 0xae, 0x85, 0x29, 0x7a, 0x6a, 0x2b, 0x37, 0xe0, 0xfa, 0x48, 0x4f, 0x93, - 0xfd, 0xfc, 0x5b, 0xc1, 0xce, 0x55, 0x76, 0xcd, 0xd8, 0x15, 0x54, 0x5b, 0x8c, 0x53, 0xa7, 0x7b, - 0x8e, 0x7e, 0xbe, 0x04, 0x97, 0x7d, 0xf2, 0xb9, 0x69, 0x0b, 0x45, 0x29, 0xf8, 0x2f, 0xf9, 0xe4, - 0x73, 0x69, 0x22, 0xee, 0x2c, 0x06, 0x7a, 0xb2, 0xf9, 0x21, 0x3d, 0xd9, 0xe9, 0x85, 0xbd, 0x70, - 0x8e, 0x8f, 0x04, 0x1f, 0xc0, 0x8d, 0x31, 0xdb, 0xed, 0xad, 0xce, 0x7b, 0x42, 0x4b, 0x49, 0xf7, - 0x3a, 0x3f, 0xc3, 0x42, 0x59, 0x40, 0xdb, 0xab, 0xe4, 0xc0, 0x6a, 0x31, 0xf9, 0xb4, 0xcf, 0x5e, - 0x14, 0x47, 0x3a, 0x10, 0xab, 0x8c, 0x21, 0x26, 0xa9, 0x2d, 0xec, 0xc3, 0xee, 0x24, 0xe3, 0x53, - 0xee, 0xa3, 0xf2, 0x62, 0x15, 0x2e, 0xd6, 0x98, 0xab, 0xfe, 0x46, 0x01, 0x75, 0x48, 0xe3, 0xf6, - 0xd6, 0x84, 0xc0, 0x1c, 0xda, 0xe1, 0xe8, 0xdf, 0x9d, 0x45, 0x2a, 0xf1, 0xf8, 0xd7, 0x0a, 0x5c, - 0x1a, 0xfc, 0x4e, 0x72, 0x7f, 0x2a, 0x9d, 0xfd, 0x42, 0xfa, 0xbb, 0x33, 0x08, 0x25, 0x7e, 0xfc, - 0x5e, 0x81, 0x2b, 0xc3, 0xdb, 0xaf, 0xb7, 0x27, 0xab, 0x1d, 0x2a, 0xa8, 0xbf, 0x3f, 0xa3, 0x60, - 0xe2, 0x53, 0x1b, 0xf2, 0x7d, 0x7d, 0x57, 0x69, 0xb2, 0xc2, 0x5e, 0x7e, 0xfd, 0xc1, 0xd9, 0xf8, - 0xd3, 0x76, 0x93, 0x2e, 0x68, 0x4a, 0xbb, 0x31, 0xff, 0xb4, 0x76, 0xd3, 0x35, 0xa5, 0xca, 0x20, - 0xd7, 0x5b, 0x4f, 0xde, 0x9d, 0x4e, 0x8d, 0x64, 0xd7, 0xbf, 0x7d, 0x26, 0xf6, 0xc4, 0xe8, 0xcf, - 0x61, 0x25, 0xf5, 0x31, 0xe9, 0xde, 0x64, 0x45, 0xfd, 0x12, 0xfa, 0x3b, 0x67, 0x95, 0x48, 0xac, - 0xbf, 0x50, 0x60, 0x6d, 0xe0, 0x23, 0x65, 0x65, 0xb2, 0xba, 0xb4, 0x8c, 0xfe, 0xf0, 0xec, 0x32, - 0x89, 0x13, 0xbf, 0x80, 0xd5, 0xf4, 0x77, 0xdd, 0x37, 0x27, 0xab, 0x4b, 0x89, 0xe8, 0xdf, 0x39, - 0xb3, 0x48, 0xef, 0x19, 0xa4, 0x4a, 0x90, 0x29, 0xce, 0xa0, 0x5f, 0x62, 0x9a, 0x33, 0x18, 0x5e, - 0x8a, 0xe0, 0x15, 0x34, 0x58, 0x87, 0xdc, 0x9f, 0x26, 0x7b, 0x53, 0x42, 0xd3, 0x5c, 0x41, 0x23, - 0x6b, 0x0d, 0xf5, 0x0f, 0x0a, 0x6c, 0x8c, 0x28, 0x34, 0xde, 0x99, 0xf6, 0x74, 0xd3, 0x92, 0xfa, - 0xf7, 0x66, 0x95, 0x4c, 0xdc, 0xfa, 0xa3, 0x02, 0xda, 0xc8, 0x7a, 0xe1, 0xe1, 0xd4, 0x87, 0x3e, - 0x20, 0xab, 0xef, 0xcd, 0x2e, 0x9b, 0x38, 0xf7, 0x17, 0x05, 0x0a, 0xe3, 0xdf, 0xe5, 0xf7, 0xa7, - 0x05, 0x60, 0x84, 0x02, 0xfd, 0xc9, 0x39, 0x15, 0xc4, 0xbe, 0xea, 0x0b, 0xbf, 0xfc, 0xe6, 0xcb, - 0xdb, 0xca, 0xde, 0x93, 0xaf, 0x5e, 0x15, 0x95, 0xaf, 0x5f, 0x15, 0x95, 0x7f, 0xbd, 0x2a, 0x2a, - 0x5f, 0xbc, 0x2e, 0x5e, 0xf8, 0xfa, 0x75, 0xf1, 0xc2, 0x3f, 0x5e, 0x17, 0x2f, 0x7c, 0x76, 0xd7, - 0xf5, 0xf8, 0x71, 0xab, 0x5e, 0xb2, 0x69, 0x13, 0xff, 0x63, 0x73, 0x57, 0xfc, 0xa3, 0xc6, 0xa7, - 0x0e, 0x29, 0x77, 0xfa, 0xfe, 0x9f, 0xd5, 0x0d, 0x08, 0xab, 0x2f, 0x62, 0x6f, 0x74, 0xff, 0xbf, - 0x01, 0x00, 0x00, 0xff, 0xff, 0xd1, 0xe6, 0x04, 0x49, 0xfd, 0x1a, 0x00, 0x00, + // 1974 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xcd, 0x6f, 0x1b, 0xd7, + 0x11, 0xf7, 0xda, 0xfa, 0x20, 0x87, 0x92, 0x2c, 0xaf, 0x65, 0x69, 0xbd, 0x0a, 0xa9, 0x0f, 0xd7, + 0x86, 0x60, 0xd8, 0xa4, 0x43, 0xa7, 0x4a, 0xea, 0x14, 0x4e, 0x2d, 0x26, 0x76, 0x05, 0x84, 0xb1, + 0xb0, 0x91, 0xd3, 0x36, 0x28, 0xba, 0x58, 0xee, 0x3e, 0xad, 0x16, 0x22, 0xf7, 0x6d, 0xf7, 0x3d, + 0x32, 0xa4, 0x5b, 0xa0, 0x45, 0xd0, 0x02, 0x05, 0x0a, 0xb4, 0x29, 0xda, 0x53, 0xef, 0x05, 0xda, + 0x9e, 0x72, 0xec, 0x9f, 0x90, 0x43, 0x0f, 0x39, 0x16, 0x3d, 0x18, 0x85, 0x7d, 0xc8, 0xa9, 0x97, + 0xfe, 0x05, 0xc5, 0xce, 0x7b, 0xbb, 0x22, 0x97, 0x9f, 0xa2, 0x10, 0x20, 0x17, 0x71, 0xdf, 0xbc, + 0xf9, 0xcd, 0xcc, 0x9b, 0x37, 0x33, 0x3b, 0xb3, 0x82, 0x5b, 0xcf, 0x09, 0xb7, 0xec, 0x63, 0xcb, + 0xf3, 0x4b, 0xf8, 0x44, 0x43, 0x52, 0xb2, 0x43, 0xca, 0x98, 0xa0, 0xf1, 0x76, 0x31, 0x08, 0x29, + 0xa7, 0x6a, 0x3e, 0xe1, 0x2b, 0xc6, 0x7c, 0xc5, 0x53, 0x3e, 0x7d, 0xc5, 0xa5, 0x2e, 0x45, 0xce, + 0x52, 0xf4, 0x24, 0x40, 0xfa, 0xed, 0x01, 0xc2, 0x83, 0x13, 0xb7, 0x84, 0x24, 0x26, 0x7f, 0x24, + 0xef, 0xad, 0x61, 0xbc, 0xd4, 0xf3, 0xf1, 0xcf, 0x18, 0x99, 0x41, 0x48, 0xe9, 0x11, 0x93, 0x3f, + 0x92, 0x77, 0x77, 0xf4, 0xe1, 0x42, 0x8b, 0x13, 0xb3, 0xee, 0x35, 0x3c, 0x4e, 0x42, 0xf3, 0xa8, + 0x6e, 0xb9, 0x31, 0xae, 0x3c, 0x1a, 0x87, 0x8f, 0x26, 0x3e, 0x9b, 0xb1, 0x83, 0xf4, 0x35, 0x9b, + 0xb2, 0x06, 0x65, 0xa5, 0x06, 0x73, 0x4b, 0xad, 0xd7, 0xa3, 0x1f, 0xb1, 0xb1, 0xfd, 0x7b, 0x05, + 0xd4, 0x2a, 0x73, 0xab, 0x9e, 0x1b, 0xe9, 0x3b, 0x64, 0xec, 0x71, 0xd3, 0x77, 0x98, 0xaa, 0xc1, + 0xbc, 0x1d, 0x12, 0x8b, 0xd3, 0x50, 0x53, 0x36, 0x95, 0x9d, 0xac, 0x11, 0x2f, 0xd5, 0xeb, 0x90, + 0x11, 0xb2, 0x3d, 0x47, 0xbb, 0xb8, 0xa9, 0xec, 0x5c, 0x32, 0xe6, 0x71, 0xbd, 0xef, 0xa8, 0xbb, + 0x30, 0x67, 0x35, 0x68, 0xd3, 0xe7, 0xda, 0xa5, 0x08, 0xb3, 0x57, 0xf8, 0xe2, 0xc5, 0xc6, 0x85, + 0x7f, 0xbf, 0xd8, 0x58, 0x15, 0xca, 0x99, 0x73, 0x52, 0xf4, 0x68, 0xa9, 0x61, 0xf1, 0xe3, 0xe2, + 0x33, 0xcf, 0xe7, 0x86, 0xe4, 0x7e, 0xb0, 0xf0, 0xe9, 0x57, 0x9f, 0xdf, 0x8e, 0x15, 0x6c, 0xbf, + 0x06, 0x7a, 0xbf, 0x41, 0x06, 0x61, 0x01, 0xf5, 0x19, 0xd9, 0xfe, 0x31, 0x5c, 0xad, 0x32, 0xf7, + 0x59, 0xe0, 0x88, 0xcd, 0x47, 0x8e, 0x13, 0x12, 0x36, 0xca, 0xde, 0x3c, 0x00, 0x67, 0xcc, 0x0c, + 0x9a, 0xb5, 0x13, 0xd2, 0x41, 0x8b, 0xb3, 0x46, 0x96, 0x33, 0x76, 0x80, 0x84, 0x94, 0xee, 0x3c, + 0xac, 0x0f, 0x90, 0x9e, 0x28, 0xff, 0xc7, 0x45, 0x58, 0xa9, 0x32, 0xf7, 0x91, 0xe3, 0xec, 0xfb, + 0x35, 0xda, 0xf4, 0x9d, 0xc3, 0xd0, 0xb2, 0x4f, 0x48, 0x38, 0x9d, 0xbb, 0xd6, 0x60, 0x9e, 0xb7, + 0xcd, 0x63, 0x8b, 0x1d, 0x0b, 0x7f, 0x19, 0x73, 0xbc, 0xfd, 0x7d, 0x8b, 0x1d, 0xab, 0x7b, 0x90, + 0x8d, 0x42, 0xca, 0xe4, 0x9d, 0x80, 0x68, 0x33, 0x9b, 0xca, 0xce, 0x52, 0xf9, 0x66, 0x71, 0x40, + 0x84, 0x07, 0x27, 0x6e, 0x11, 0x63, 0xaf, 0x42, 0x3d, 0xff, 0xb0, 0x13, 0x10, 0x23, 0x63, 0xcb, + 0x27, 0xf5, 0x21, 0xcc, 0x62, 0xb0, 0x69, 0xb3, 0x9b, 0xca, 0x4e, 0xae, 0xfc, 0xad, 0x61, 0x78, + 0x19, 0x91, 0x07, 0xd1, 0xcf, 0xde, 0x45, 0x4d, 0x31, 0x04, 0x4c, 0xdd, 0x02, 0xa8, 0xd5, 0xa9, + 0x7d, 0x22, 0xec, 0x9b, 0xc3, 0xfb, 0x8c, 0xb6, 0xb3, 0x48, 0x45, 0x33, 0xf3, 0x90, 0xe1, 0x6d, + 0xd3, 0xf3, 0x1d, 0xd2, 0xd6, 0xe6, 0xa3, 0xa3, 0x21, 0xc3, 0x3c, 0x6f, 0xef, 0x47, 0xa4, 0x94, + 0x67, 0x0b, 0xf0, 0xda, 0x20, 0xcf, 0x25, 0xae, 0x6d, 0xc2, 0x5a, 0x95, 0xb9, 0x06, 0x69, 0xd0, + 0x16, 0xf9, 0x3a, 0x9d, 0x9b, 0x32, 0x6b, 0x0b, 0x36, 0x86, 0xa8, 0x4d, 0x2c, 0xfb, 0xcb, 0x45, + 0xb8, 0x52, 0x65, 0xee, 0x0f, 0x8e, 0x3d, 0x4e, 0xea, 0x1e, 0xe3, 0xef, 0x19, 0x95, 0xf2, 0xbd, + 0x11, 0x46, 0xdd, 0x80, 0x45, 0x12, 0xda, 0xe5, 0x7b, 0xa6, 0x25, 0xa2, 0x47, 0xc6, 0xdc, 0x02, + 0x12, 0xe3, 0x78, 0xed, 0xb6, 0xfc, 0x52, 0xaf, 0xe5, 0x2a, 0xcc, 0xf8, 0x56, 0x43, 0x5c, 0x7c, + 0xd6, 0xc0, 0x67, 0x75, 0x15, 0xe6, 0x58, 0xa7, 0x51, 0xa3, 0x75, 0xbc, 0xce, 0xac, 0x21, 0x57, + 0xaa, 0x0e, 0x19, 0x87, 0xd8, 0x5e, 0xc3, 0xaa, 0x33, 0xbc, 0xa3, 0x45, 0x23, 0x59, 0xab, 0xeb, + 0x90, 0x75, 0x2d, 0x26, 0x2a, 0x88, 0xb8, 0x1f, 0x23, 0xe3, 0x5a, 0xec, 0xfd, 0x68, 0xad, 0x56, + 0x60, 0xb1, 0xee, 0xfd, 0xb4, 0xe9, 0x39, 0x1e, 0xef, 0x98, 0xb6, 0x15, 0x68, 0x99, 0x89, 0x32, + 0x76, 0x21, 0x01, 0x55, 0xac, 0x20, 0xe5, 0x4a, 0x13, 0xae, 0xf7, 0xb9, 0x29, 0x76, 0x62, 0xe4, + 0x94, 0xe7, 0x3d, 0x4e, 0x11, 0x4e, 0x5b, 0x78, 0xde, 0xed, 0x94, 0x3c, 0x80, 0x6d, 0x27, 0x21, + 0x25, 0x53, 0x35, 0xa2, 0x60, 0x40, 0x6d, 0xff, 0xf6, 0x22, 0x5c, 0x13, 0x31, 0xf4, 0xb4, 0xc9, + 0xcf, 0x1f, 0x21, 0x2b, 0x30, 0xeb, 0x53, 0xdf, 0x26, 0xe8, 0xff, 0x19, 0x43, 0x2c, 0xba, 0xe3, + 0x66, 0xa6, 0x27, 0x29, 0xbf, 0x69, 0x09, 0xf5, 0x10, 0xf2, 0x03, 0x9d, 0x91, 0xb8, 0x3c, 0x0f, + 0xe0, 0x31, 0x33, 0xc4, 0xd0, 0x76, 0xd0, 0x2f, 0x19, 0x23, 0xeb, 0x31, 0x11, 0xeb, 0xce, 0x36, + 0x03, 0x2d, 0x89, 0xfc, 0xaf, 0xcf, 0x9f, 0x29, 0xa3, 0xb7, 0x61, 0x73, 0x98, 0xd2, 0x24, 0xdf, + 0xfe, 0xa9, 0xc0, 0xe5, 0x2a, 0x73, 0x3f, 0xa2, 0x9c, 0x3c, 0xb1, 0xd8, 0x41, 0xe8, 0xd9, 0x64, + 0x6a, 0x83, 0x82, 0x08, 0x1d, 0x1b, 0x84, 0x0b, 0x75, 0x0b, 0x16, 0x82, 0xd0, 0xa3, 0x61, 0x14, + 0xf8, 0x47, 0x84, 0xe0, 0x4d, 0xcc, 0x18, 0xb9, 0x98, 0xf6, 0x98, 0x20, 0x8b, 0xb8, 0x2a, 0xbf, + 0xd9, 0xa8, 0x91, 0x10, 0x03, 0x61, 0xc6, 0xc8, 0x21, 0xed, 0x03, 0x24, 0xa9, 0x3a, 0xcc, 0xb1, + 0x66, 0x10, 0xd4, 0x3b, 0x22, 0x21, 0xf1, 0xa2, 0x24, 0x25, 0x75, 0xe4, 0xeb, 0x58, 0xd8, 0xba, + 0x4f, 0x93, 0x9c, 0xf4, 0xb3, 0xb9, 0xe4, 0xa4, 0xb1, 0x33, 0x46, 0x9c, 0x74, 0x1d, 0x30, 0x17, + 0x44, 0xfc, 0x88, 0xe4, 0xc8, 0x44, 0x04, 0x0c, 0x9d, 0x37, 0x60, 0x95, 0xd6, 0x18, 0x09, 0x5b, + 0xc4, 0x31, 0xa9, 0x94, 0xd5, 0x5d, 0xfd, 0x56, 0xe2, 0xdd, 0x58, 0x11, 0xa2, 0x2a, 0x50, 0xe8, + 0x47, 0xc9, 0x28, 0x25, 0x9e, 0x7b, 0xcc, 0xe5, 0xd1, 0xd7, 0xd3, 0xe8, 0x3d, 0x8c, 0x59, 0x64, + 0x51, 0xdf, 0x06, 0xbd, 0x5f, 0x48, 0x54, 0x79, 0x9a, 0x8c, 0x38, 0x1a, 0xa0, 0x80, 0xb5, 0xb4, + 0x80, 0x27, 0x16, 0x7b, 0xc6, 0x88, 0xa3, 0x52, 0xb8, 0xd9, 0x0f, 0x26, 0x47, 0x47, 0xc4, 0xe6, + 0x5e, 0x8b, 0xa0, 0x18, 0x71, 0x87, 0x39, 0x74, 0x73, 0x5e, 0xd6, 0xa7, 0x6b, 0xfd, 0xf5, 0x69, + 0xdf, 0xe7, 0xc6, 0x56, 0x5a, 0xcd, 0x7b, 0xb1, 0xa4, 0x24, 0x92, 0x0e, 0xc6, 0x2b, 0x14, 0x15, + 0x73, 0x01, 0x0d, 0x1f, 0x29, 0x51, 0x94, 0xd2, 0x9f, 0xc0, 0x52, 0xcb, 0xaa, 0x37, 0x89, 0x19, + 0x12, 0x9b, 0x78, 0x51, 0xae, 0x89, 0x90, 0x78, 0x73, 0x74, 0x2d, 0xfd, 0xdf, 0x8b, 0x8d, 0x6b, + 0x1d, 0xab, 0x51, 0x7f, 0xb0, 0xdd, 0x8b, 0xde, 0x36, 0x16, 0x91, 0x60, 0xc8, 0xb5, 0xfa, 0x2e, + 0xcc, 0x31, 0x6e, 0xf1, 0xa6, 0xa8, 0xf0, 0x4b, 0xe5, 0x3b, 0x43, 0x5b, 0x01, 0xd1, 0xb0, 0x4a, + 0xe0, 0x87, 0x88, 0x31, 0x24, 0x56, 0xbd, 0x09, 0x4b, 0xc9, 0x71, 0x91, 0x51, 0xbe, 0x12, 0x16, + 0x63, 0x6a, 0x25, 0x22, 0xaa, 0x77, 0x40, 0x4d, 0xd8, 0xa2, 0xb6, 0x49, 0x64, 0x74, 0x06, 0x7d, + 0xb1, 0x1c, 0xef, 0x1c, 0x32, 0xf6, 0x01, 0x16, 0xcb, 0x9e, 0x46, 0x25, 0x3b, 0x55, 0xa3, 0x32, + 0x34, 0x5b, 0x62, 0x87, 0x27, 0xd9, 0xf2, 0xf7, 0x79, 0x58, 0x92, 0x7b, 0xf2, 0x4d, 0x3d, 0x22, + 0x59, 0xa2, 0x17, 0x26, 0xf1, 0x1d, 0x12, 0xca, 0x4c, 0x91, 0x2b, 0xf5, 0x16, 0x5c, 0x16, 0x4f, + 0x66, 0xea, 0xf5, 0xbb, 0x28, 0xc8, 0x15, 0x59, 0x3b, 0x74, 0xc8, 0xc8, 0x0b, 0x09, 0xe5, 0x7b, + 0x20, 0x59, 0x47, 0xae, 0x8c, 0x9f, 0xa5, 0x2b, 0x67, 0x85, 0x88, 0x98, 0x2a, 0x5c, 0x79, 0xda, + 0x0d, 0xcf, 0x9d, 0xa5, 0x1b, 0x8e, 0x0e, 0xd5, 0x20, 0x8c, 0x59, 0xae, 0xf0, 0x7b, 0xd6, 0x88, + 0x97, 0x51, 0x5d, 0xf2, 0xfc, 0xae, 0xd4, 0xce, 0xe2, 0x76, 0x4e, 0xd2, 0x30, 0xa3, 0xef, 0xc1, + 0x4a, 0xcc, 0xd2, 0x93, 0xc7, 0x22, 0x0d, 0x55, 0xb9, 0xd7, 0x9d, 0xbe, 0x3d, 0x6d, 0x42, 0x0e, + 0xd9, 0x4e, 0xdb, 0x84, 0x9e, 0x0b, 0x5e, 0x98, 0xae, 0x13, 0x5d, 0x87, 0x2c, 0x6f, 0x9b, 0x34, + 0xf4, 0x5c, 0xcf, 0xd7, 0x16, 0x85, 0x2f, 0x79, 0xfb, 0x29, 0xae, 0xa3, 0x1a, 0x6d, 0x31, 0x46, + 0xb8, 0xb6, 0x84, 0x1b, 0x62, 0xa1, 0x6e, 0x40, 0x8e, 0xb4, 0x88, 0xcf, 0xe5, 0xbb, 0xf0, 0x32, + 0x5a, 0x05, 0x48, 0xc2, 0x57, 0xa1, 0x1a, 0xc2, 0x75, 0x1c, 0x5f, 0x6c, 0x5a, 0x37, 0x6d, 0xea, + 0xf3, 0xd0, 0xb2, 0xb9, 0xd9, 0x22, 0x21, 0xf3, 0xa8, 0xaf, 0x2d, 0xa3, 0x9d, 0xbb, 0xc5, 0x91, + 0x33, 0x61, 0xf4, 0x82, 0x46, 0x7c, 0x45, 0xc2, 0x3f, 0x12, 0x68, 0x63, 0x2d, 0x18, 0xbc, 0xa1, + 0xfe, 0x28, 0xba, 0xf6, 0x16, 0x09, 0xb9, 0x49, 0x03, 0xee, 0x51, 0x9f, 0x69, 0x57, 0xb0, 0x13, + 0xb8, 0x33, 0x46, 0x91, 0x81, 0xa0, 0xa7, 0x02, 0xb3, 0x37, 0x13, 0x45, 0x41, 0x14, 0x2a, 0x5d, + 0x44, 0xb5, 0x0a, 0x0b, 0xb6, 0x55, 0xaf, 0x27, 0x82, 0x55, 0x14, 0x7c, 0x7b, 0x8c, 0xe0, 0x8a, + 0x55, 0xaf, 0x4b, 0x09, 0x46, 0xce, 0x3e, 0x5d, 0xa8, 0x77, 0xe1, 0xaa, 0xc7, 0xcc, 0xee, 0x39, + 0x30, 0xda, 0xd5, 0xae, 0x62, 0x0b, 0xb0, 0xec, 0xb1, 0x4a, 0xb4, 0x83, 0x41, 0x1a, 0x89, 0xe8, + 0x2a, 0x30, 0x2b, 0xc3, 0x0b, 0x4c, 0x97, 0x5e, 0x99, 0x7d, 0xbd, 0x05, 0x26, 0x95, 0xc7, 0x1a, + 0xac, 0xf6, 0xe6, 0x6a, 0x92, 0xc6, 0x1f, 0x63, 0x37, 0xfd, 0xa8, 0x46, 0x43, 0xfe, 0x21, 0x6f, + 0xda, 0x27, 0x95, 0xca, 0xe1, 0x0f, 0x47, 0x8f, 0x6f, 0x23, 0x7a, 0xc2, 0x94, 0xd6, 0x75, 0x6c, + 0x41, 0x7b, 0x65, 0x27, 0x8a, 0x7f, 0xa5, 0xe0, 0xf0, 0x66, 0x90, 0xa3, 0xa6, 0xef, 0x20, 0x0f, + 0x71, 0xce, 0xa5, 0x5c, 0x14, 0x82, 0x48, 0x5a, 0xd2, 0xd5, 0x8a, 0x97, 0xed, 0xa2, 0xa0, 0xca, + 0xb6, 0x76, 0xe0, 0x20, 0xd4, 0x67, 0x45, 0x62, 0xe6, 0x5f, 0x15, 0x3c, 0x84, 0x98, 0x41, 0x0d, + 0x8b, 0x93, 0xf7, 0xc5, 0x27, 0x80, 0xc7, 0x75, 0xcb, 0x1d, 0x35, 0xe7, 0xda, 0xa0, 0xf6, 0x7f, + 0x31, 0x40, 0x9b, 0x73, 0xe5, 0xd2, 0xb8, 0x10, 0x4d, 0xa9, 0x91, 0x51, 0xba, 0x1c, 0xa6, 0xe8, + 0xa9, 0xa3, 0xdc, 0x80, 0xad, 0xa1, 0x96, 0x26, 0xe7, 0xf9, 0xaf, 0x82, 0x33, 0xb5, 0x9c, 0xe7, + 0x71, 0x2a, 0xa8, 0x34, 0x19, 0xa7, 0x4e, 0xe7, 0x1c, 0x5f, 0x1a, 0x8a, 0x70, 0xd5, 0x27, 0x9f, + 0x98, 0xb6, 0x10, 0x94, 0x72, 0xff, 0x15, 0x9f, 0x7c, 0x22, 0x55, 0xc4, 0x93, 0x45, 0xdf, 0x4c, + 0x36, 0x33, 0x60, 0x26, 0x3b, 0x2d, 0xd8, 0xb3, 0xe7, 0xf8, 0x7c, 0xf1, 0x2e, 0xdc, 0x18, 0x71, + 0xdc, 0xee, 0xee, 0xbc, 0x2b, 0xb4, 0x94, 0xf4, 0xac, 0xf3, 0x33, 0x6c, 0x94, 0x85, 0x6b, 0xbb, + 0x85, 0x1c, 0x58, 0x4d, 0x26, 0x5f, 0xed, 0xd3, 0x37, 0xc5, 0x91, 0x0c, 0xf4, 0x55, 0xc6, 0x10, + 0x8b, 0xd4, 0x11, 0xf6, 0x61, 0x67, 0x9c, 0xf2, 0x09, 0xcf, 0x51, 0xfe, 0xe3, 0x32, 0x5c, 0xaa, + 0x32, 0x57, 0xfd, 0x8d, 0x02, 0xea, 0x80, 0xc1, 0xed, 0x8d, 0x31, 0x81, 0x39, 0x70, 0xc2, 0xd1, + 0xbf, 0x3b, 0x0d, 0x2a, 0xb1, 0xf8, 0xd7, 0x0a, 0x5c, 0xe9, 0xff, 0x82, 0x73, 0x7f, 0x22, 0x99, + 0xbd, 0x20, 0xfd, 0xed, 0x29, 0x40, 0x89, 0x1d, 0xbf, 0x53, 0x60, 0x65, 0xe0, 0xf7, 0x8e, 0xdd, + 0xf1, 0x52, 0x07, 0xe1, 0xf4, 0x87, 0xd3, 0xe1, 0x12, 0x83, 0xfe, 0xa0, 0xc0, 0xb5, 0xc1, 0xf3, + 0xe0, 0x9b, 0x93, 0x4a, 0x4e, 0xdf, 0xd4, 0x3b, 0x53, 0x02, 0x13, 0x9b, 0x5a, 0xb0, 0xd0, 0x33, + 0x08, 0x16, 0xc7, 0x0b, 0xec, 0xe6, 0xd7, 0x77, 0xcf, 0xc6, 0x9f, 0xd6, 0x9b, 0x8c, 0x65, 0x13, + 0xea, 0x8d, 0xf9, 0x27, 0xd5, 0x9b, 0x6e, 0x72, 0x55, 0x06, 0xb9, 0xee, 0x06, 0xf7, 0xee, 0x64, + 0x62, 0x24, 0xbb, 0xfe, 0xed, 0x33, 0xb1, 0x27, 0x4a, 0x7f, 0x0e, 0x4b, 0xa9, 0xaf, 0x5b, 0xf7, + 0xc6, 0x0b, 0xea, 0x45, 0xe8, 0x6f, 0x9d, 0x15, 0x91, 0x68, 0xff, 0x54, 0x81, 0xe5, 0xbe, 0xef, + 0xb9, 0xe5, 0xf1, 0xe2, 0xd2, 0x18, 0xfd, 0xc1, 0xd9, 0x31, 0x89, 0x11, 0xbf, 0x80, 0xcb, 0xe9, + 0x4f, 0xe0, 0xaf, 0x8f, 0x17, 0x97, 0x82, 0xe8, 0xdf, 0x39, 0x33, 0xa4, 0xfb, 0x0e, 0x52, 0x3d, + 0xd1, 0x04, 0x77, 0xd0, 0x8b, 0x98, 0xe4, 0x0e, 0x06, 0xf7, 0x46, 0x58, 0x13, 0xfb, 0x1b, 0xa3, + 0xfb, 0x93, 0x64, 0x6f, 0x0a, 0x34, 0x49, 0x4d, 0x1c, 0xda, 0xfc, 0xa8, 0x7f, 0x52, 0x60, 0x75, + 0x48, 0xe7, 0xf3, 0xd6, 0xa4, 0xb7, 0x9b, 0x46, 0xea, 0xdf, 0x9b, 0x16, 0x99, 0x98, 0xf5, 0x67, + 0x05, 0xb4, 0xa1, 0x0d, 0xcc, 0x83, 0x89, 0x2f, 0xbd, 0x0f, 0xab, 0xef, 0x4d, 0x8f, 0x4d, 0x8c, + 0xfb, 0x9b, 0x02, 0xf9, 0xd1, 0x8d, 0xc2, 0x3b, 0x93, 0x3a, 0x60, 0x88, 0x00, 0xfd, 0xc9, 0x39, + 0x05, 0xc4, 0xb6, 0xea, 0xb3, 0xbf, 0xfc, 0xea, 0xf3, 0xdb, 0xca, 0xde, 0x93, 0x2f, 0x5e, 0x16, + 0x94, 0x2f, 0x5f, 0x16, 0x94, 0xff, 0xbc, 0x2c, 0x28, 0x9f, 0xbd, 0x2a, 0x5c, 0xf8, 0xf2, 0x55, + 0xe1, 0xc2, 0xbf, 0x5e, 0x15, 0x2e, 0x7c, 0x7c, 0xd7, 0xf5, 0xf8, 0x71, 0xb3, 0x56, 0xb4, 0x69, + 0x03, 0xff, 0xb9, 0x75, 0x57, 0xfc, 0x4f, 0xcb, 0xa7, 0x0e, 0x29, 0xb5, 0x7b, 0xfe, 0xf5, 0xd7, + 0x09, 0x08, 0xab, 0xcd, 0xe1, 0xb0, 0x76, 0xff, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x0b, 0x0b, + 0xdb, 0xdd, 0x28, 0x1c, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1889,6 +1996,7 @@ const _ = grpc.SupportPackageIsVersion4 type MsgClient interface { AddOutboundTracker(ctx context.Context, in *MsgAddOutboundTracker, opts ...grpc.CallOption) (*MsgAddOutboundTrackerResponse, error) AddInboundTracker(ctx context.Context, in *MsgAddInboundTracker, opts ...grpc.CallOption) (*MsgAddInboundTrackerResponse, error) + RemoveInboundTracker(ctx context.Context, in *MsgRemoveInboundTracker, opts ...grpc.CallOption) (*MsgRemoveInboundTrackerResponse, error) RemoveOutboundTracker(ctx context.Context, in *MsgRemoveOutboundTracker, opts ...grpc.CallOption) (*MsgRemoveOutboundTrackerResponse, error) VoteGasPrice(ctx context.Context, in *MsgVoteGasPrice, opts ...grpc.CallOption) (*MsgVoteGasPriceResponse, error) VoteOutbound(ctx context.Context, in *MsgVoteOutbound, opts ...grpc.CallOption) (*MsgVoteOutboundResponse, error) @@ -1929,6 +2037,15 @@ func (c *msgClient) AddInboundTracker(ctx context.Context, in *MsgAddInboundTrac return out, nil } +func (c *msgClient) RemoveInboundTracker(ctx context.Context, in *MsgRemoveInboundTracker, opts ...grpc.CallOption) (*MsgRemoveInboundTrackerResponse, error) { + out := new(MsgRemoveInboundTrackerResponse) + err := c.cc.Invoke(ctx, "/zetachain.zetacore.crosschain.Msg/RemoveInboundTracker", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *msgClient) RemoveOutboundTracker(ctx context.Context, in *MsgRemoveOutboundTracker, opts ...grpc.CallOption) (*MsgRemoveOutboundTrackerResponse, error) { out := new(MsgRemoveOutboundTrackerResponse) err := c.cc.Invoke(ctx, "/zetachain.zetacore.crosschain.Msg/RemoveOutboundTracker", in, out, opts...) @@ -2041,6 +2158,7 @@ func (c *msgClient) UpdateERC20CustodyPauseStatus(ctx context.Context, in *MsgUp type MsgServer interface { AddOutboundTracker(context.Context, *MsgAddOutboundTracker) (*MsgAddOutboundTrackerResponse, error) AddInboundTracker(context.Context, *MsgAddInboundTracker) (*MsgAddInboundTrackerResponse, error) + RemoveInboundTracker(context.Context, *MsgRemoveInboundTracker) (*MsgRemoveInboundTrackerResponse, error) RemoveOutboundTracker(context.Context, *MsgRemoveOutboundTracker) (*MsgRemoveOutboundTrackerResponse, error) VoteGasPrice(context.Context, *MsgVoteGasPrice) (*MsgVoteGasPriceResponse, error) VoteOutbound(context.Context, *MsgVoteOutbound) (*MsgVoteOutboundResponse, error) @@ -2065,6 +2183,9 @@ func (*UnimplementedMsgServer) AddOutboundTracker(ctx context.Context, req *MsgA func (*UnimplementedMsgServer) AddInboundTracker(ctx context.Context, req *MsgAddInboundTracker) (*MsgAddInboundTrackerResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AddInboundTracker not implemented") } +func (*UnimplementedMsgServer) RemoveInboundTracker(ctx context.Context, req *MsgRemoveInboundTracker) (*MsgRemoveInboundTrackerResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RemoveInboundTracker not implemented") +} func (*UnimplementedMsgServer) RemoveOutboundTracker(ctx context.Context, req *MsgRemoveOutboundTracker) (*MsgRemoveOutboundTrackerResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RemoveOutboundTracker not implemented") } @@ -2142,6 +2263,24 @@ func _Msg_AddInboundTracker_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } +func _Msg_RemoveInboundTracker_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRemoveInboundTracker) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RemoveInboundTracker(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/zetachain.zetacore.crosschain.Msg/RemoveInboundTracker", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RemoveInboundTracker(ctx, req.(*MsgRemoveInboundTracker)) + } + return interceptor(ctx, in, info, handler) +} + func _Msg_RemoveOutboundTracker_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgRemoveOutboundTracker) if err := dec(in); err != nil { @@ -2370,6 +2509,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "AddInboundTracker", Handler: _Msg_AddInboundTracker_Handler, }, + { + MethodName: "RemoveInboundTracker", + Handler: _Msg_RemoveInboundTracker_Handler, + }, { MethodName: "RemoveOutboundTracker", Handler: _Msg_RemoveOutboundTracker_Handler, @@ -2645,6 +2788,71 @@ func (m *MsgAddInboundTrackerResponse) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } +func (m *MsgRemoveInboundTracker) 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 *MsgRemoveInboundTracker) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRemoveInboundTracker) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TxHash) > 0 { + i -= len(m.TxHash) + copy(dAtA[i:], m.TxHash) + i = encodeVarintTx(dAtA, i, uint64(len(m.TxHash))) + i-- + dAtA[i] = 0x1a + } + if m.ChainId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.ChainId)) + i-- + dAtA[i] = 0x10 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgRemoveInboundTrackerResponse) 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 *MsgRemoveInboundTrackerResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRemoveInboundTrackerResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + func (m *MsgWhitelistERC20) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3775,6 +3983,35 @@ func (m *MsgAddInboundTrackerResponse) Size() (n int) { return n } +func (m *MsgRemoveInboundTracker) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.ChainId != 0 { + n += 1 + sovTx(uint64(m.ChainId)) + } + l = len(m.TxHash) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgRemoveInboundTrackerResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func (m *MsgWhitelistERC20) Size() (n int) { if m == nil { return 0 @@ -4871,6 +5108,189 @@ func (m *MsgAddInboundTrackerResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgRemoveInboundTracker) 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 ErrIntOverflowTx + } + 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: MsgRemoveInboundTracker: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRemoveInboundTracker: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + 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 ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + m.ChainId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ChainId |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TxHash", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + 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 ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TxHash = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRemoveInboundTrackerResponse) 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 ErrIntOverflowTx + } + 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: MsgRemoveInboundTrackerResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRemoveInboundTrackerResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *MsgWhitelistERC20) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0